我有一个项目,我们正试图让Node在多个开发人员中运行并运行。机器。问题是并非所有的开发人员都是Node(甚至JavaScript)开发人员,我们希望确保他们拥有运行特定项目所需的Node版本(开发人员将在他们的计算机上拥有多个Node项目)。
我读到了关于package.json"引擎"现场,但我似乎无法找到任何方法来安装我需要的Node版本。为了测试,我通过NVM将当前节点版本设置为v0.10.29,创建了一个package.json,指定了v0.11.13的必要引擎,并尝试通过node
命令以及程序包启动Node。 json定义的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
是什么给了什么?!
答案 0 :(得分:5)
我相信engines和engineStrict适用于安装(通过npm)的时候,而不是当您尝试执行<时/ strong>节点的东西。这些选项警告/阻止用户安装不能与当前使用的节点版本一起工作(或兼容)的软件包。
答案 1 :(得分:3)
我有两个解决这个问题的方法......
Soln#1 :使用节点版本管理器,可以下载并安装特定版本的Node和NPM(以及适用于Windows的x86 / x64架构),然后允许开发人员切换版本。
视窗:
Mac / Linux:
Soln#2 :使用Docker镜像在具有所选Node版本的Linux VM上运行dev代码。您的开发人员现在都获得了相同的开发环境,有望与您的最终部署环境相匹配。
n向您展示如何Dockerize您的Web应用程序以进行部署。在开发期间,您希望替换COPY . /src
命令,使用卷从主机文件系统安装代码,以避免在更新代码时进行映像重建。一个技巧是创建基本映像,然后派生开发(./src是卷)和部署(复制./src)映像。
最后,您还可以利用Docker执行This example
参考文献:
答案 2 :(得分:2)
npm注册表包括一个名为“ node”的软件包。这是一个常规的npm软件包,仅包含Node.js二进制文件。
因此,在有问题的目录中运行:
npm install node@your.desired.version --save-exact
然后,将脚本放入您的package.json
中,如下所示:
"scripts": {
"v": "node -v"
}
要进行验证,请在终端的项目根目录中运行node -v
,您应该会看到在计算机上设置的版本。通过运行npm run v
进行比较,您应该看到为项目设置的版本。这样,您可以无缝移动文件系统并执行各种构建,而无需更改全局节点配置。
原则上,每个带有npm软件包的可执行文件都链接到项目中的本地二进制文件目录。这意味着当我们安装这样的软件包时,我们可以在其中找到其可执行文件的链接。
注意:将节点engine设置为建议-“此字段仅供参考,仅在将软件包作为依赖项安装时才会产生警告。”
答案 3 :(得分:0)
.nvmrc
如果您本来应该是using NVM like this,则可以在git跟踪的.nvmrc
文件中指示给定项目所需的nodejs版本:
echo v10.15.1 > .nvmrc
这在cd
上不会自动生效,这是明智的:用户必须执行以下操作:
nvm use
,现在该节点版本将用于当前shell。
您可以列出拥有的节点的版本:
nvm list
.nvmrc
记录在:https://github.com/creationix/nvm/tree/02997b0753f66c9790c6016ed022ed2072c22603#nvmrc
经过NVM 0.33.11测试。