【发布时间】:2014-09-12 05:53:19
【问题描述】:
我有一个项目,我们试图让 Node 启动并在多个开发人员的机器上运行。问题在于,并非所有开发人员都是 Node(甚至是 JavaScript)开发人员,我们希望确保他们拥有运行特定项目所需的 Node 版本(开发人员将在他们的机器上拥有多个 Node 项目)。
我阅读了有关 package.json 的“engines”字段的信息,但我似乎找不到任何方法来安装我需要的 Node 版本。为了测试,我通过 NVM 将我当前的节点版本设置为 v0.10.29,创建了一个 package.json 指定 v0.11.13 的必要引擎,并尝试通过node 命令以及通过 package.json- 启动 Node定义npm start 命令。
blackjack:node-engines-test sent1nel$ node -v
v0.10.29
blackjack:node-engines-test sent1nel$ cat package.json
{
"name": "node-engines-test",
"version": "0.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"engineStrict": true,
"engines": {
"node": "v0.11.13"
},
"start": "node index.js",
"author": "",
"license": "ISC"
}
blackjack:node-engines-test sent1nel$ cat index.js
console.log('Version: ' + process.version);
blackjack:node-engines-test sent1nel$ node index.js
Version: v0.10.29
blackjack:node-engines-test sent1nel$ npm start
blackjack:node-engines-test sent1nel$
npm install 似乎也不关心节点引擎版本。
blackjack:node-engines-test sent1nel$ npm install
npm WARN package.json node-engines-test@0.0.0 No description
npm WARN package.json node-engines-test@0.0.0 No repository field.
npm WARN package.json node-engines-test@0.0.0 No README data
blackjack:node-engines-test sent1nel$ node -v
v0.10.29
什么给了?!
【问题讨论】:
-
您从哪里读到指定
engines安装、需要或使用特定的节点版本?我很确定它所做的一切都提供了有关预期节点版本的信息 - npmjs.org/doc/package.json.html#engines 。如果你想强制一个版本(无论出于何种原因),你可以使用engineStrict- npmjs.org/doc/package.json.html#engineStrict -
正如您在上面的
package.json中看到的,我实际上确实设置了engineStrict标志。我假设会发生的是,设置该标志将安装或提供一个警告,表明错误的 Node 版本处于活动状态,正如您从日志中看到的那样,这不会发生。 -
如果您使用的是 NVM,那么您需要将每个人的机器设置为相同的版本。我能想到的最简单的方法是编写一个可以完成所有工作的 shell 脚本。
-
我正在使用
nvm- 我只是想确保显示警告,因此如果开发人员需要运行nvm install vx.y.z,他们知道该怎么做。如果什么都不存在,我有代码要写。 -
很公平,谢谢(如果
engineStrict标志在功能上无用,wtf 就是它的重点?)
标签: javascript node.js dependencies npm