플랫폼 간 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-envdotenv-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을 사용할 수 있습니다. :)

좋은 웹페이지 즐겨찾기