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