更改npm脚本的工作目录

elj*_*efe 70 makefile node.js npm package.json

问:是否可以更改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"
},
Run Code Online (Sandbox Code Playgroud)

显然cd deps/2.7/cpython/ && ./configure可以在类UNIX系统上工作,但不能在Windows上工作.

原因:问题的根源是,configurepython repo 的命令将文件输出到调用它的目录中.然而,这些文件与repo的目录中的文件相关make并且make install查找这些文件.

在这种情况下,我无法改变,Makefile因为Python的构建过程是可以理解的复杂.

替代方案:替代方案可能是编写一些install.js并使用节点的OS独立API和一些child_process.exec(),我可能会这样做.但是,不离开npm会非常好.

elj*_*efe 73

npm只允许这样做cd dir && command -args,也可以在Windows上运行.

由于上述解决方案,node已在PR https://github.com/npm/npm/pull/10958中更改了使用的spawn功能,但被拒绝了.

  • 不确定我是否做了什么,但最近 Windows 出现了这种中断。 (2认同)

Pau*_*tte 5

如上所述:

npm可能正在使用

var spawn = require('child_process').spawn
Run Code Online (Sandbox Code Playgroud)

这将允许您设置如下选项:

    {cwd: pwd + 'somepath'}
Run Code Online (Sandbox Code Playgroud)

但不是暴露它.

我用一个相当大的解决了它,install.js大致相当于它,它从package.json上面调用.但是,API child_process并不容易处理,因为它会导致很多难以调试的错误.花了我一些时间,但我现在很高兴.