如何为项目指定本地版本的Node?

时间:2014-07-21 16:24:17

标签: javascript node.js dependencies npm

我有一个项目,我们正试图让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

是什么给了什么?!

4 个答案:

答案 0 :(得分:5)

我相信enginesengineStrict适用于安装(通过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测试。