npm 스크립트의 작업 디렉토리 변경


82

Q : npm이 스크립트를 실행하는 컨텍스트를 변경할 수 있습니까?

내가 원하는 것은 다음과 같습니다.

"scripts": {
   "test": "gulp mocha",
   "pre-install": "./deps/2.7/cpython/configure --prefix=$(pwd)/build --exec-prefix=$(pwd)/build && make -C deps/2.7/cpython && make -C deps/2.7/cpython install",
   "install": "node-gyp rebuild"
},

분명히 cd deps/2.7/cpython/ && ./configureUNIX와 유사한 시스템에서는 작동하지만 Windows에서는 작동하지 않습니다.

이유 : 문제 configure의 원인은 python repo 의 명령이 파일이 호출 된 디렉토리에 파일을 출력한다는 것입니다. 파일은 그러나 빌드 관련이 makemake install어느 REPO의 디렉토리에있는 파일을 찾아보십시오.

이 경우 MakefilePython의 빌드 프로세스가 복잡하기 때문에 변경할 수 없습니다 .

대안 : 대안은 아마도 일부를 작성 install.js하고 노드의 OS 독립적 API와 일부 child_process.exec()를 사용하는 것입니다. 그러나 npm 을 떠나지 않는 것이 정말 좋을 것입니다.


1
추가 스크립트를 작성하고 npm에서 실행하는 것에 대해 잘못된 것이 없다고 생각합니다.
webduvet

2
cd deps/2.7/cpython/ && ./configureWindows에서 작동해야합니다-어떤 문제가 발생합니까?
Richard Williams

몇몇의. 사용할 수 없습니다 ./configure --prefix=$(pwd)/somepath. 예쁘지 않습니다. 아직 찾지 못했지만을 npm사용 중일 것입니다.을 사용 var spawn = require('child_process').spawn하면 같은 옵션을 설정할 수 {cwd: pwd + 'somepath'}있지만 노출하지는 않습니다. 또한 철학입니다. 패키지 관리에는 빌드 도구와 공통되는 많은 기능이 있습니다. 이 길을 가려면 이와 같은 특정 기능도 필요합니다.
eljefedelrodeodeljefe

2
나는 install.js 대략적으로 그것을 수행하는 상당히 큰으로 해결했으며 package.json위와 같이 호출됩니다 . 그러나 API는 child_process디버깅하기 어려운 오류를 겪기 때문에 다루기가 쉽지 않습니다. 좀 시간이 걸렸습니다,하지만 난 지금 행복 해요
eljefedelrodeodeljefe

답변:


91

npm만 허용하며 cd dir && command -argsWindows에서도 실행됩니다.

nodePR https://github.com/npm/npm/pull/10958 에서의 스폰 기능 을 사용하도록 변경 되었지만 위의 솔루션으로 인해 거부되었습니다.


1
내가 뭔가를했는지 확실하지 않지만 최근에 Windows에서이 휴식을 취했습니다.

6

위에서 언급 한대로 :

npm은 아마도

var spawn = require('child_process').spawn

다음과 같은 옵션을 설정할 수 있습니다.

    {cwd: pwd + 'somepath'}

그러나 그것을 노출하지 않습니다.

나는 install.js대략적으로 그것을 수행하는 상당히 큰으로 해결했으며 package.json위와 같이 호출됩니다 . API는 child_process디버깅하기 어려운 오류를 많이 발생시키기 때문에 처리하기가 쉽지 않습니다. 시간이 좀 걸렸지 만 지금은 행복합니다.


진상. 불행히도 내 답변에서 언급했듯이 PR에서 거부되었습니다.
eljefedelrodeodeljefe

: 유사 stackoverflow.com/questions/18894433/... 너무 나를 위해 작동
yeahdixon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.