很容易从私有注册表中安装软件包:
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
轻松地将它们安装在任何其他设备上?