更改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
命令将文件输出到调用它的目录中。 然而,这些文件与make
和make 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的错误。 花了我一些时间,但我现在很开心。