问:是否可以更改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
构建相关,用于查找存储库目录中的文件。
在这种情况下,我无法更改Makefile
,因为Python的构建过程可以理解为复杂。
备选:另一种选择可能是编写一些install.js
并使用节点的操作系统独立API和一些child_process.exec()
,我可能会这样做。但是,不要离开 npm 会非常好。
答案 0 :(得分:66)
npm
只允许cd dir && command -args
,它也可以在Windows上运行。
由于上述解决方案,已在PR https://github.com/npm/npm/pull/10958中对node
的spawn功能进行了更改,但遭到拒绝。
答案 1 :(得分:5)
如上所述:
npm可能正在使用
var spawn = require('child_process').spawn
允许您设置以下选项:
{cwd: pwd + 'somepath'}
但不暴露它。
我用一个相当大的
install.js
来解决它,它大致相同,它从上面的package.json
调用。但child_process
的API并不容易处理,因为它会导致很多难以调试的错误。花了我一些时间,但我现在很高兴。