npm install不考虑package-lock.json

时间:2019-08-06 09:02:46

标签: npm npm-install package-lock.json

很容易从私有注册表中安装软件包:

npm install my-package --registry https://<private-registry-url>

这会将条目添加到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="
    },

到目前为止,一切都很好。

现在的问题是,当您想使用npm install从其他设备安装所有npm软件包时。这将失败,并显示以下错误:

npm ERR! code E404
npm ERR! 404 Not Found - GET https://registry.npmjs.org/my-package - Not found
npm ERR! 404
npm ERR! 404  'my-package@1.0.0' is not in the npm registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404 It was specified as a dependency of 'app'
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http url, or git url.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\<user>\AppData\Roaming\npm-cache\_logs\2019-08-06T08_33_05_103Z-debug.log

因此,它尝试从公共npm注册表(my-package)中获取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

然后,它会一直起作用,直到您升级my-package的版本或切换设备。

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

那么如何正确地从私人注册表中安装软件包,以便可以使用npm install轻松地将它们安装在任何其他设备上?

0 个答案:

没有答案