更改npm脚本的工作目录

时间:2015-05-17 11:35:03

标签: node.js npm makefile 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"
},

显然cd deps/2.7/cpython/ && ./configure可以在类UNIX系统上运行,但不适用于Windows。

为什么:问题的根源是,python repo的configure命令将文件输出到调用它的目录中。但是,这些文件与makemake install构建相关,用于查找存储库目录中的文件。

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

备选:另一种选择可能是编写一些install.js并使用节点的操作系统独立API和一些child_process.exec(),我可能会这样做。但是,不要离开 npm 会非常好。

2 个答案:

答案 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并不容易处理,因为它会导致很多难以调试的错误。花了我一些时间,但我现在很高兴。