问: 是否可以更改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 存储库的 configure
命令会将文件输出到调用命令所在的目录。但是这些文件对于 make
和 make install
构建过程非常重要,它们需要在存储库的目录中查找这些文件。
在这种情况下,我无法更改 Makefile
,因为 Python 的构建过程非常复杂,不容易理解。
替代方案: 可能的替代方案是编写一些 install.js
,并使用 Node 的跨平台 API 以及一些 child_process.exec()
。我可能会这样做,但最好不离开 npm。
cd deps/2.7/cpython/ && ./configure
еә”иҜҘеңЁ Windows дёҠеҸҜиЎҢ - жӮЁйҒҮеҲ°дәҶд»Җд№Ҳй—®йўҳпјҹ - Richard Williams./configure --prefix=$(pwd)/somepath
。这不太好看。我还没有找到它,但是npm
可能正在使用var spawn = require('child_process').spawn
,这将允许您设置选项,如{cwd: pwd + 'somepath'}
,但未公开它。这也是一种哲学:软件包管理器具有与构建工具相同的许多功能。如果他们走这条路,他们需要像这样的某些功能。 - eljefedelrodeodeljefeinstall.js
解决了这个问题,它大致做了这个工作,并且像上面那样从package.json
调用。不过,child_process
的 API 不是很容易处理,因为它会抛出许多难以调试的错误。花了我一些时间,但现在我很高兴。 - eljefedelrodeodeljefe