更改npm脚本的工作目录


80

问:是否可以更改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上运行。

原因:问题的根源在于configurepython repo的命令将文件输出到调用它的目录中。但是,这些文件是与构建相关的,make并且make install在回购目录中查找文件。

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

替代方案:替代方案可能是编写一些install.js并使用节点的操作系统独立API和some child_process.exec(),我可能会这样做。但是,不离开npm真的很好。


1
我相信编写额外的脚本并从npm运行该脚本没有错。
webduvet

2
cd deps/2.7/cpython/ && ./configure应该可以在Windows上使用-您遇到什么问题?
理查德·威廉姆斯

一些。您不能使用./configure --prefix=$(pwd)/somepath。不好看 我还没有找到它,但是npm可能正在使用var spawn = require('child_process').spawn,它可以让您设置像这样的选项{cwd: pwd + 'somepath'},但是没有公开它。这也是一种哲学:软件包管理具有与构建工具相同的大量功能。如果他们走这条路,他们也需要具有某些类似的功能。
eljefedelrodeodeljefe

2
我已经用一个相当大的来解决了这个问题install.js ,它可以大致做到这一点,并且它package.json像上面那样被调用。但是,API的child_process处理不是那么容易,因为它经历了难以调试的错误。花了我一些时间,但现在我很高兴
eljefedelrodeodeljefe 2015年

Answers:



6

如上所述:

npm可能正在使用

var spawn = require('child_process').spawn

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

    {cwd: pwd + 'somepath'}

但没有公开。

我已经用一个相当大的来解决了这个问题install.js,它可以大致做到这一点,并且它package.json像上面那样被调用。但是,APIchild_process并不是那么容易处理,因为它会引发大量难以调试的错误。花了我些时间,但现在我很高兴。


权利。不幸的是,正如我在回答中指出的那样,它已在PR中被拒绝。
eljefedelrodeodeljefe

类似于: stackoverflow.com/questions/18894433/… 这也对我
有用
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.