플랫폼 간 package.json 스크립트
2895 단어 npmjavascriptnode
package.json
가 있고 Linux, Mac 및 Windows에서 작동하도록 만들고 싶습니까?파일 및 폴더 지우기
rm -rf
또는 find
인수와 함께 delete
를 사용했을 수 있습니다. Windows에서는 작동하지 않습니다. 대신 rimraf
를 설치하십시오. 디렉토리와 파일 모두에서 작동합니다."clean": "rimraf .cache coverage public",
"remove-source-maps": "rimraf public/**/*.js.map"
작은 따옴표가 없습니다 감사합니다!
작은따옴표는 Windows에서 작동하지 않으므로 사용할 수 없습니다. 대신 항상 큰따옴표를 사용하십시오!
"echo \"this is fine\""
dotenv 등록 또는 --max-old-space-size 사용
다음과 같은 스크립트를 갖게 되었을 수 있습니다.
"task": "node -r dotenv/register --max-old-space-size=2048 ./node_modules/.bin/script"
여기서 문제는 Windows에서 사용되는
script
대신 script.cmd
를 실행하게 되므로 Windows에서 작동하지 않는다는 것입니다.그 대신
cross-env
및 dotenv-cli
를 설치한 다음 다음을 작성할 수 있습니다."task": "dotenv cross-env NODE_OPTIONS=\"--max-old-space-size=2048\" script"
NODE_OPTIONS
는 스크립트에 node
를 명시적으로 포함하지 않아도 되는 좋은 방법이기도 합니다.교차 변수 사용
또한 명령(또는 모든 환경 변수)에서
.env
파일의 환경 변수를 실제로 사용할 수 있습니다. 다음을 설치하여 이를 달성할 수 있습니다cross-var
."dotenv cross-var \"script task %TASK_ENV%\""
우리는 Windows 환경 구문을 사용합니다. 우리는 유닉스 구문을 사용할 수 있지만 분명히 Macs transform
$TASK_ENV
before dotenv
executes . 나에게 이것은 cross-var
와 함께 Windows 스타일 변수를 항상 사용하는 것이 가장 안전하다는 것을 암시합니다.세미콜론 지원 부족 문제 해결
;
를 사용하여 여러 명령을 실행하고 최종 결과를 무시할 수 있습니다. Windows에서 작동하는 동등한 것은 없습니다. 따라서 다음 대신:"task": "yarn task-one; yarn task-two",
조금 더 못생긴 솔루션에 의존해야합니다.
"task": "(yarn task-one || true) && yarn task-two",
도구 플랫폼 차이에 주의하십시오!
도구가 여러 플랫폼에서 유사하게 작동하면 좋겠지만 항상 그런 것은 아닙니다. 한 가지 불행한 경우는
svgo
Linux 및 Mac에서는 전달할 수 있지만path/*.svg
Windows에서는 전달할 수 없는 경우입니다. Windows 버전은 경로만 허용하며 와일드카드를 지원하지 않습니다.이 도구는 또한 LF 전용 코드베이스에서 원하는 것이 아닐 수 있는 Windows에서 CRLF 줄 변경으로 출력하는 것으로 나타납니다. 개인적으로 저는 Windows에서도 모든 소스를 LF로 사용하는 것을 선호합니다.
결론
Windows 개발자인 경우 개발자 무리에서 종종 이상한 사람이 될 수 있지만 차이점과 단점을 알고 나면 대부분의 작업을 매우 쉽게 처리할 수 있습니다. 운 좋게도 다른 모든 방법이 실패하면 요즘에는 WSL을 사용할 수 있습니다. :)
Reference
이 문제에 관하여(플랫폼 간 package.json 스크립트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/merri/cross-platform-package-json-scripts-53m텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)