npm install 不考虑 package-lock.json 中的注册表/解析路径

ysf*_*ran 5 npm npm-install package-lock.json

从私有注册表安装软件包非常简单:

npm install my-package --registry https://<private-registry-url>
Run Code Online (Sandbox Code Playgroud)

这将添加一个条目到package-lock.json

"my-package": {
      "version": "1.0.0",
      "resolved": "https://<private-registry-url>/<some_path>/my-package-1.0.0.tgz",
      "integrity": "sha1-Pjs/y9sEp49/OC8+8eEZFdwT3BQ="
    },
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,一切都符合预期。

现在的问题是,当您想使用npm install. 这将失败并出现以下错误:

npm install my-package --registry https://<private-registry-url>
Run Code Online (Sandbox Code Playgroud)

所以它试图my-package从公共 npm 注册表 ( https://registry.npmjs.org/my-package) 中获取,但当然失败了,因为my-package它位于私有注册表中。

现在,这真的伤了我的理解package-lock.json..不应该NPM照照package-lock.json,看看那里的包是前解决?相反,它只是假设它必须在公共注册表中。

另一个有趣的事情是,一旦您--registry再次手动安装带有标志的软件包,它就会起作用:

npm install my-package --registry https://<private-registry-url> && npm i
Run Code Online (Sandbox Code Playgroud)

之后它每次都会工作,直到您升级版本my-package或切换设备。

我也尝试过npm ci命令但没有成功(同样的错误)。

那么如何从私有注册表正确安装软件包,以便可以使用npm install?