在特定节点版本上运行应用程序

时间:2014-03-05 03:44:31

标签: javascript node.js web

是否可以强制我的应用程序在某些特定或上层节点版本下运行? 如果某个环境有较旧的节点,我发现我的应用可能有错误。

我想知道我是否可以在package.json中设置它。如果出现任何问题,可以将相关消息记录到终端。

3 个答案:

答案 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