是否可以强制我的应用程序在某些特定或上层节点版本下运行? 如果某个环境有较旧的节点,我发现我的应用可能有错误。
我想知道我是否可以在package.json中设置它。如果出现任何问题,可以将相关消息记录到终端。
答案 0 :(得分:3)
您可以使用节点版本管理器:https://github.com/creationix/nvm
安装NVM后,您可以根据需要安装多个不同版本的Node,并可以选择在哪个版本下运行给定的应用程序。
如果您希望应用程序仅运行给定版本,您可以使用以下代码检查版本:process.versions.node
并与之进行比较。例如,将它放在app.js
的开头(或者你的初始文件是什么):
// Using package semver for clarity
var semver = require('semver');
if (!semver.satisfies(process.versions.node, '>0.11.0')) {
console.log('Incorrect Node version');
process.exit();
}
(以下仅适用于npm包)
在测试了不同版本之后,您可以使用package.json
参数在engines
中指定您的包与哪些版本的Node兼容。以下声明适用于所有等于或大于0.6.0
的版本:
"engines": {
"node": ">=0.6"
}
应该注意的是,这实际上并没有强迫用户使用 >=0.6
,但如果有人试图npm install
您的包,则会出错。如果您想强制使用版本,可以添加"engineStrict": true
。
答案 1 :(得分:0)
正如@SomeKittens的回答所描述的那样,您应该在package.json
中声明这一点。然而,这并不“强迫”任何东西。这只是一个兼容性声明。如果您确实想要检测到这一点并采取一些操作,例如记录警告或退出并显示错误,您可以使用process.versions.node
获取正在运行的版本,如semver
这样的程序包来计算您是否兼容或不,并采取你的行动。
通常,这不是常见的事情。社区几乎是0.6岁以上,如果你的应用程序无法在所有0.10版本上运行,那就有点蹩脚,甚至0.8支持通常都是微不足道的,除非你的应用程序涉及某个节点的内核。
来自npm help json
:
engines
You can specify the version of node that your stuff works on:
{ "engines" : { "node" : ">=0.10.3 <0.12" } }
And, like with dependencies, if you don't specify the version (or if you specify "*" as the ver-
sion), then any version of node will do.
If you specify an "engines" field, then npm will require that "node" be somewhere on that list.
If "engines" is omitted, then npm will just assume that it works on node.
You can also use the "engines" field to specify which versions of npm are capable of properly
installing your program. For example:
{ "engines" : { "npm" : "~1.0.20" } }
Note that, unless the user has set the engine-strict config flag, this field is advisory only.
engineStrict
If you are sure that your module will definitely not run properly on versions of Node/npm other
than those specified in the engines hash, then you can set "engineStrict": true in your pack-
age.json file. This will override the user's engine-strict config setting.
Please do not do this unless you are really very very sure. If your engines hash is something
overly restrictive, you can quite easily and inadvertently lock yourself into obscurity and pre-
vent your users from updating to new versions of Node. Consider this choice carefully. If peo-
ple abuse it, it will be removed in a future version of npm.
答案 2 :(得分:-1)
节点版本管理器(NVM)以管理多个Node.js版本
<强>安装强>
将git存储库从github克隆到〜/ .nvm或您希望的任何其他文件夹中。
$ git clone git://github.com/creationix/nvm.git ~/.nvm
要激活它,请使用source或从bash shell中获取它。 -
$ . ~/.nvm/nvm.sh
如果你想知道什么。尝试其中一个命令 -
$ help source
$ help .
它基本上读取并执行传递给它的文件名中的所有命令(在我们的例子中是〜/ .nvm / nvm.sh),在当前shell中。
<强>用法强>
使用它非常简单,让我们看看如何 -
# To check what versions can be installed
$ nvm ls-remote
# To install:
# nvm install [version]
$ nvm install 0.10.0
# To check what versions are installed
$ nvm ls
# To use the installed version
$ nvm use 0.10.0
# .. or just run the node repl with that version
$ nvm run 0.10.0
# To remove/uninstall
$ nvm uninstall 0.10.0
安装节点v0.10.0时,它将安装在〜/ .nvm / v0.10.0中,驻留在〜/ .nvm / v0.10.0 / bin中的新节点二进制文件将添加到PATH环境变量中。
$ node -v
v0.10.3
$ nvm install 0.10.0
######################################################################## 100.0%
Now using node v0.10.0
$ node -v
v0.10.0