8

我想在我的 NodeJS 项目中强制执行 NodeJS 和 NPM 的确切版本。这是我的 package.json:

{
  "name": "nodesandbox",
  "version": "0.0.1",
  "dependencies": {
    "less": "*"
  },
  "engines": {
    "node": "0.10.25"
  }
}

当我运行时,nvm ls我得到这个输出:

    v0.2.6
    v0.7.12
    v0.9.6
  v0.10.12
  v0.10.15
  v0.10.21
current:    v0.10.24

当我运行npm install它时它工作正常,但我希望它失败。我已按照此链接 [1] 中的说明进行操作,这就是为什么我认为在引擎对象中设置节点版本应该可以工作,但遗憾的是它不起作用。

[1] http://blog.nodejitsu.com/package-dependencies-done-right/#node-dependency-in-apps

4

1 回答 1

5

看起来engine只有在从另一个位置获取包时才检查依赖项:

[timwolla@/tmp/test2]npm install ../test
npm WARN engine nodesandbox@0.0.1: wanted: {"node":"0.10.30"} (current: {"node":"v0.10.26","npm":"1.4.3"})

如果engineStrict设置为真:

[timwolla@/tmp/test2]npm install ../test
npm ERR! notsup Unsupported
npm ERR! notsup Not compatible with your version of node/npm: nodesandbox@0.0.1
npm ERR! notsup Required: {"node":"0.10.30"}
npm ERR! notsup Actual:   {"npm":"1.4.3","node":"v0.10.26"}

如果您仔细阅读手册,可能会清楚为什么(实际上我不是 100% 确定这一点):

相比

npm install(在包目录中,没有参数):

在本地 node_modules 文件夹中安装依赖项。

npm install <folder>

安装位于文件系统文件夹中的软件包。

第一个状态安装依赖项,而第二个安装

于 2014-03-15T00:53:49.303 回答