Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 赫罗库';s npm可以';见猫鼬4.2.2_Node.js_Heroku_Mongoose - Fatal编程技术网

Node.js 赫罗库';s npm可以';见猫鼬4.2.2

Node.js 赫罗库';s npm可以';见猫鼬4.2.2,node.js,heroku,mongoose,Node.js,Heroku,Mongoose,我在package.json中有这一集,它在localhost中运行良好 { ... "mongoose": "4.x", "mongoose-auto-increment": "5.x" ... } 同时,安装mongoose 4.2.2和mongoose auto increment 5.0.1。Heroku日志提供了以下信息: npm ERR! node v4.2.1 npm ERR! npm v2.14.7 npm ERR! code EPE

我在package.json中有这一集,它在localhost中运行良好

{
   ...
   "mongoose": "4.x",
   "mongoose-auto-increment": "5.x"
   ...
}
同时,安装mongoose 4.2.2和mongoose auto increment 5.0.1。Heroku日志提供了以下信息:

   npm ERR! node v4.2.1
   npm ERR! npm  v2.14.7
   npm ERR! code EPEERINVALID

   npm ERR! peerinvalid The package mongoose@4.1.11 does not satisfy its siblings' peerDependencies requirements!

   npm ERR! peerinvalid Peer mongoose-auto-increment@5.0.1 wants mongoose@^4.1.12

Heroku似乎使用了不同的过时npm,还是严重依赖缓存?因为mongoose 4.2.2包是在16小时前发布的

Heroku使用的缓存与您的本地
节点模块
目录类似。这与您在本地看到的行为相同,先安装mongoose 4.1.11,然后安装mongoose auto increment:

v4.1.1:~/test/epeer$ npm install --save mongoose@4.1.11
...
v4.1.1:~/test/epeer$ npm install --save mongoose-auto-increment@5.0.1
npm WARN peerDependencies The peer dependency mongoose@^4.1.12 included from mongoose-auto-increment will no
npm WARN peerDependencies longer be automatically installed to fulfill the peerDependency
npm WARN peerDependencies in npm 3+. Your application will need to depend on it explicitly.
npm ERR! Darwin 14.5.0
npm ERR! argv "/Users/hloftis/.nvm/versions/node/v4.1.1/bin/node" "/Users/hloftis/.nvm/versions/node/v4.1.1/bin/npm" "install" "--save" "mongoose-auto-increment@5.0.1"
npm ERR! node v4.1.1
npm ERR! npm  v2.14.4
npm ERR! code EPEERINVALID

npm ERR! peerinvalid The package mongoose@4.1.11 does not satisfy its siblings' peerDependencies requirements!
npm ERR! peerinvalid Peer mongoose-auto-increment@5.0.1 wants mongoose@^4.1.12
在本地,您可能会更新一个,然后安装另一个,甚至只是
rm-rf节点\ U模块
。在Heroku上,您可以禁用
节点\u模块
缓存以获得相同的结果:

$ heroku config:set NODE_MODULES_CACHE=false
$ git push heroku master
$ heroku config:unset NODE_MODULES_CACHE

然而,更好的技术是指定精确的依赖项,而不是让应用程序的依赖项漂移。因此,只需指定“4.2.2”而不是“4.x”,并指定“5.0.1”而不是“5.x”。这样,您就知道您正在开发和测试的软件包与您正在部署的软件包完全相同—通过使用semver范围,您的依赖项版本可以随时更改为满足范围的任何内容。

感谢NODE\u MODULES\u CACHE的帮助。对于更大的模块(并且维护得很严格),我只信任semver。这就是为什么我使用5.x/4.x而不是确切的版本(我通常在任何部署之前都会在本地更新node_模块),更重要的是在安装应用程序的所有不同环境之间实现奇偶性,而不是信任semver。例如,在当前的代码库中,明年运行的
npm安装
将与今天的运行完全不同。只要应用程序不在生产中,这就可以了,但这是需要注意的。另一种思考方式是,这里指定的semver范围是错误的。他们说“Mongoose4.anything将与MongooseAutoIncrement5.anything一起工作”,但事实并非如此。mongoose 4.1.11+mongoose自动增量5.0.1=>失败。