Node.js在依赖解析中发生冲突

时间:2015-10-05 00:22:29

标签: node.js npm dependency-management

  • 我在版本1.0.0
  • 上创建了一个节点模块
  • 我发布了
  • 现在,在其他测试项目中,我尝试使用此依赖项,效果很好
  • 然后我将模块更新为版本1.0.1并全局安装但未发布
  • 然后我尝试将项目测试的依赖版本更新为1.0.1,但依赖项无法解析

依赖关系只能从远程服务器解析吗?

模块项目:

{
  "name": "my-module",
  "version": "1.0.1",
...
}

在本地存储库上安装:

npm install --save

的package.json:

{
  "name" : "my-project-test",
  "version" : "0.0.1",
  "dependencies" : {
    "my-module": "1.0.1"
  }
  ...
}

结果错误:

$ npm install
npm ERR! Linux 3.16.0-45-generic
npm ERR! argv "node" "/usr/bin/npm" "install"
npm ERR! node v0.12.7
npm ERR! npm  v3.3.5

npm ERR! No compatible version found: my-module@1.0.1
npm ERR! Valid install targets:
npm ERR! ["1.0.0"]
npm ERR! 
npm ERR! 
npm ERR! If you need help, you may report this error at:
npm ERR!     <https://github.com/npm/npm/issues>

npm ERR! Please include the following file with any support request:
npm ERR! ./npm-debug.log

1 个答案:

答案 0 :(得分:1)

您现在有多个依赖项安装:

  1. 全球,您使用npm i -g <name>安装了此版本1.0.1
  2. 本地,此版本先前已在版本1.0.0上安装。
  3. Node.js尝试查找名称引用的模块的顺序如下:

    1. 检查给定模块是否为核心模块。
    2. 在当前目录(项目目录)中搜索名为node_modules的目录。
    3. 在文件夹层次结构中向上工作,检查node_modules文件夹的每个级别。
    4. 查看节点中require.paths数组中列出的目录路径。
    5. 您的全局node_modules目录位于第4个列表项中;在本地node_modules目录之后很久。意味着您的程序在安装的本地依赖项处停止。

      节点识别出本地安装了版本1.0.0,并指出错误。请注意包含No compatible version found: my-module@1.0.1的块。这是因为您package.json拥有1.0.1。一旦Node找到旧版本,查找就不会继续,因此要么升级本地安装,要么从Node的方式中删除它。

      要删除它,请在项目目录中使用npm uninstall <name>,以便从Node的方式中删除对版本1.0.0的依赖性,从而强制它查找全局目录。< / p>

      来源(非常推荐阅读!):