运行 npm install 时将变量传递给 node-gyp
Pass variable to node-gyp when running npm install
我正在使用 node-gyp
to create a Node.js addon 并且我的 binding.gyp
包含如下一些变量:
...
"link_settings": {
"libraries": [
"-lboost_program_options",
"-lboost_log",
],
"ldflags": [
"-L<@(boost_root)/stage/lib",
"-Wl,-rpath,<@(boost_root)/stage/lib",
]
},
...
(来自 here 的完整 gyp 文件)。我使用 node-gyp configure --boost_root=/PATH/TO/BOOST build
构建 C++
来源。当我 运行 npm install
时出现问题,因为它只是在没有任何参数的情况下调用 node-gyp rebuild
。
有没有办法做到以下任何一项?
- 不运行
node-gyp
在运行宁npm install
时重建
- 当运行宁
npm install
时给node-gyp
传递参数
我自己从未尝试过,但根据 this 你可以在 package.json
:
中声明你自己的安装脚本
"scripts" : {
"install" : "node-gyp configure --boost_root=/PATH/TO/BOOST build"
}
编辑:刚试过,效果如广告所示。
除了从 install
脚本中调用 node-gyp
,您还可以调用打包为模块一部分的 shell 脚本。例如:
"scripts" : {
"install" : "./scripts/build.sh"
}
脚本会(以某种方式)确定正确的配置设置并使用它们调用 node-gyp
:
#!/bin/sh
...determine correct settings...
# call node-gyp
node-gyp configure --boost_root=$BOOST_PATH build
确保脚本具有可执行权限。
如果您需要用户提供路径,最简单的方法是让他们设置一个环境变量。假设它被称为 BOOST_PATH
,这应该有效:
"scripts" : {
"install" : "node-gyp configure --boost_root=\"$BOOST_PATH\" build"
}
用户可以这样设置:
$ env BOOST_PATH=/PATH/TO/BOOST npm install yourmodule
在与@robertklep 进行长时间讨论后,我发现将路径作为 command line flag 传递也可以解决问题:
npm install --boost_path=/PATH/TO/BOOST
然而,正如他所提到的,不知道如果另一个包需要我的包并试图将参数传递给它会发生什么。
更新:
事实证明,如果另一个包使用原始包,也可以应用此解决方案:
npm link /PATH/TO/ORIGINAL_PACKET --boost_path=/PATH/TO/BOOST
或者如果您直接从包管理器安装,现在想通过依赖包安装它:
npm install --boost_path=/PATH/TO/BOOST
我正在使用 node-gyp
to create a Node.js addon 并且我的 binding.gyp
包含如下一些变量:
...
"link_settings": {
"libraries": [
"-lboost_program_options",
"-lboost_log",
],
"ldflags": [
"-L<@(boost_root)/stage/lib",
"-Wl,-rpath,<@(boost_root)/stage/lib",
]
},
...
(来自 here 的完整 gyp 文件)。我使用 node-gyp configure --boost_root=/PATH/TO/BOOST build
构建 C++
来源。当我 运行 npm install
时出现问题,因为它只是在没有任何参数的情况下调用 node-gyp rebuild
。
有没有办法做到以下任何一项?
- 不运行
node-gyp
在运行宁npm install
时重建
- 当运行宁
npm install
时给
node-gyp
传递参数
我自己从未尝试过,但根据 this 你可以在 package.json
:
"scripts" : {
"install" : "node-gyp configure --boost_root=/PATH/TO/BOOST build"
}
编辑:刚试过,效果如广告所示。
除了从 install
脚本中调用 node-gyp
,您还可以调用打包为模块一部分的 shell 脚本。例如:
"scripts" : {
"install" : "./scripts/build.sh"
}
脚本会(以某种方式)确定正确的配置设置并使用它们调用 node-gyp
:
#!/bin/sh
...determine correct settings...
# call node-gyp
node-gyp configure --boost_root=$BOOST_PATH build
确保脚本具有可执行权限。
如果您需要用户提供路径,最简单的方法是让他们设置一个环境变量。假设它被称为 BOOST_PATH
,这应该有效:
"scripts" : {
"install" : "node-gyp configure --boost_root=\"$BOOST_PATH\" build"
}
用户可以这样设置:
$ env BOOST_PATH=/PATH/TO/BOOST npm install yourmodule
在与@robertklep 进行长时间讨论后,我发现将路径作为 command line flag 传递也可以解决问题:
npm install --boost_path=/PATH/TO/BOOST
然而,正如他所提到的,不知道如果另一个包需要我的包并试图将参数传递给它会发生什么。
更新:
事实证明,如果另一个包使用原始包,也可以应用此解决方案:
npm link /PATH/TO/ORIGINAL_PACKET --boost_path=/PATH/TO/BOOST
或者如果您直接从包管理器安装,现在想通过依赖包安装它:
npm install --boost_path=/PATH/TO/BOOST