更改npm脚本的工作目录

问:是否可以更改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/ && ./configure可以在类UNIX系统上工作,但不能在Windows上工作。

为什么:问题的根源在于,python repo的configure命令将文件输出到调用它的目录中。 然而,这些文件与makemake install有关,它们查找repo目录中的文件。

在这种情况下,我不能更改Makefile因为Python的构build过程非常复杂。

一种方法:可能是写一些install.js并使用节点的操作系统无关的API和一些child_process.exec() ,我可能会这样做。 但是,不离开npm会很好。

npm只允许执行cd dir && command -args ,它也可以在Windows上运行。

PR https://github.com/npm/npm/pull/10958使用了;node的产生function,但由于上述解决scheme,被拒绝了。

如上所述:

npm可能正在使用

 var spawn = require('child_process').spawn 

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

  {cwd: pwd + 'somepath'} 

但没有暴露它。

我用一个相当大的install.js解决了这个问题,它的function大致如上所述,并从package.json调用。 然而, child_process的API并不容易处理,因为它会抛出大量的难以debugging的错误。 花了我一些时间,但我现在很开心。