NPM:找不到“npm link”模块后

我正在为 NodeJS 开发两个模块,第一个模块名为 aligator ,第二个模块名为 aligator-methods 。第二个取决于第一个工作。我正在同时开发这两个模块,我想全局链接 aligator 这样我就可以像在 npm 注册表上一样使用它,并且我只是在全局范围内安装了它。要做到这一点,NPM 文档说我需要使用 npm link 但它不起作用。

模块 package.json 的文件 aligator

{
  "name": "aligator",
  "version": "0.0.1",
  "description": "",
  "main": "index.js",
  "private": true,
  "directories": {
    "doc": "docs",
    "example": "examples",
    "test": "spec"
  },
  "scripts": {
    "test": "gulp jasmine"
  },
  "license": "MIT",
  "devDependencies": {
    "gulp": "^3.6.2",
    "gulp-jasmine": "^0.2.0",
    "gulp-jshint": "^1.6.1",
    "gulp-rename": "^1.2.0",
    "jasmine-node": "^1.14.3"
  },
  "dependencies": {
    "bluebird": "^1.2.4",
    "lodash": "^2.4.1",
    "mathjs": "^0.22.0"
  }
}

模块 package.json 的文件 aligator-methods

{
 "name": "aligator-methods",
 "version": "0.0.1",
 "description": "",
 "main": "index.js",
 "private": true,
 "directories": {
   "doc": "docs",
   "example": "examples",
   "test": "jasmine"
 },
 "scripts": {
   "test": "gulp jasmine"
 },
 "author": "",
 "license": "MIT",
 "devDependencies": {
   "gulp": "^3.6.2",
   "gulp-jasmine": "^0.2.0",
   "gulp-jshint": "^1.6.1",
   "gulp-rename": "^1.2.0",
   "jasmine-node": "^1.14.3"
 },
 "dependencies": {
   "lodash": "^2.4.1",
   "mathjs": "^0.22.0",
   "aligator": "^0.0.1"
 }
}

首先,我全局链接了模块:

$ cd ~/aligator
$ npm link
/usr/local/lib/node_modules/aligator -> /Users/roc/aligator

如果我没记错的话,这已经创建了我的模块 aligator 的全局引用,现在我可以在计算机中任何我想要的地方使用这个模块。

然后我转到另一个模块并尝试安装依赖项,但它给了我这个输出:

$ cd ~/aligator-methods
$ npm install
npm ERR! 404 404 Not Found: aligator
npm ERR! 404
npm ERR! 404 'aligator' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it
npm ERR! 404 It was specified as a dependency of 'aligator-methods'
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, or http url, or git url.

npm ERR! System Darwin 13.2.0
npm ERR! command "node" "/usr/local/bin/npm" "install"
npm ERR! cwd /Users/roc/aligator-methods
npm ERR! node -v v0.10.28
npm ERR! npm -v 1.4.16
npm ERR! code E404
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR!     /Users/roc/aligator-methods/npm-debug.log
npm ERR! not ok code 0

我什至尝试将其直接链接到:

$ cd ~/aligator-methods
$ npm link aligator
/Users/roc/aligator-methods/node_modules/aligator -> /usr/local/lib/node_modules/aligator -> /Users/roc/aligator

但它也没有奏效。

关于可能发生什么的任何想法? 我在某处读到它可能与我安装的 nodenpm 有关,因为它是由 Homebrew 制作的,所以有时我需要使用 sudo ,这似乎不太可能,但我尝试了他们提出的建议,但也没有用。

stack overflow NPM: After "npm link" module is not found
原文答案
author avatar

接受的答案

问题是 mainpackage.json 属性指向一个不存在的文件。似乎该问题可能由于多种原因而发生,因此请务必查看其他答案。


答案:

作者头像

由于 NVM,我遇到了这个问题,我正在为依赖项运行一个版本的node,为依赖项运行另一个版本。

作者头像

删除 package-lock.json 然后再次运行 npm install 为我解决了这个问题。

作者头像

当您第一次从 npm link 目录运行 aligator 时,您会创建一个从全局 node_modules 目录到 aligator 的链接。然后,当您从 npm link aligator 目录运行 aligator-methods 时,您将 aligator 从本地安装的 node_modules 链接到原始源(如上面示例中的输出所示)。完成后,不再需要安装,因为它已经“安装”了。在运行 npm link aligator 命令后,您看到了什么错误?

如果您只想从本地目录安装依赖项,您可以尝试使用 npm install 代替。例如:

$ cd ~/鳄鱼方法
$ npm 安装 ../鳄鱼

作者头像

我的问题最终是 repo A 使用 npm 而 repo B 使用 yarn ,所以我需要在 repo B 中运行 yarn link 以便通过 npm link package-name 将其拉入 repo A .

作者头像

对我有用的是:

1.删​​除依赖和消费者模块中的 node_modules
2.运行 npm unlink --no-save [dependency-module]

  1. 根据 npm-link 使用 2-link 命令重新链接

现在我可以在本地全面测试我未发布的模块。

此外,还有一个 npm pack 命令可以帮助您测试未发布的模块,尽管不是那么健壮。

npm-pack

作者头像

修复这个问题的我的版本;在 npm v5.3.0 中,我从链接到另一个项目的 repo 中删除了 node_modules

我发现在 npm v3 之后,他们尝试将所有 node_modules 依赖项放入一个 node_modules 目录(一个在你的项目中)以尽可能地展平结构( http://codetunnel.io/npm-5-changes-to-npm-link/ )。

作者头像

对我来说,当我从 0.1.0 到 0.0.1 的本地包 decreased the version number 时发生了这种情况。在我链接到这个包的项目中,我仍然使用更高的版本号。更新 package.json 中的依赖项修复了它。

作者头像

使用 peerDependency 时

我正在开发两个包, stejsstejs-loaderstejs-loaderstejs 作为 peerDependency 。当我在我的项目中运行 npm link stejs-loadernpm link stejs 时,我收到了一个错误,即 stejs-loader 找不到 stejs 。我通过在 npm link stejs 目录中运行 stejs-loader 来修复它。

作者头像

检查 tsconfig moduleResolution

如果像我一样,您碰巧将 tsconfig modulees5 更改为 esnext 或其他东西,那么 moduleResolution 默认值可能已更改。

如果没有将 moduleResolution 设置为“node”,typescript 将不会解析 node_modules 包。

您可以在 Compiler Options 页面上阅读有关默认值如何依赖于 module 的值的信息,而 target 的默认值又依赖于 — 但可能会将其显式设置为“node”。