mit*_*man 20 node.js npm npm-registry
我有大量现有的package-lock.json依赖项,已通过http://registry.npmjs.org/解决。
例如
{
"name": "my-package",
"version": "1.2.3",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@babel/cli": {
"version": "7.7.4",
"resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.7.4.tgz",
"integrity": "sha512-O7mmzaWdm+VabWQmxuM8hqNrWGGihN83KfhPUzp2lAW4kzIMwBxujXkZbD4fMwKMYY9FXTbDvXsJqU+5XHXi4A==",
"dev": true,
"requires": {
"chokidar": "^2.1.8",
"commander": "^4.0.1",
"convert-source-map": "^1.1.0",
"fs-readdir-recursive": "^1.1.0",
"glob": "^7.0.0",
"lodash": "^4.17.13",
"make-dir": "^2.1.0",
"slash": "^2.0.0",
"source-map": "^0.5.0"
},
"dependencies": {
"commander": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.0.1.tgz",
"integrity": "sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA==",
"dev": true
},
"make-dir": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
"integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
"dev": true,
"requires": {
"pify": "^4.0.1",
"semver": "^5.6.0"
}
},
"pify": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
"integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
"dev": true
},
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
}
}
},
...
Run Code Online (Sandbox Code Playgroud)
我将注册表配置为 NPM Enterprise 安装,该安装托管专有 NPM 包并镜像公共 NPM 注册表。
registry = "https://custom.registry.tld/path/npm/npm-aggregate"
Run Code Online (Sandbox Code Playgroud)
这适用于新安装的软件包,但许多现有软件包仍然指向公共 NPM 注册表。npm i我尝试使用或覆盖 package-lock.json npm i --package-lock-only。
如何强制 NPM 使用我的 Enterprise NPM 注册表并将正确的resolvedURL写入package-lock.json?我可能只能“查找并替换”,但我想确保 NPM 正确解决依赖关系。
小智 11
我正在运行npm -v2015 年 6 月 14 日
我只是手动更改了注册表项 package-lock.json并删除了该node_modules文件夹,然后运行了一个npm i来解决此问题。
一些对我不起作用的解决方案:
当我尝试仅使用 npm CLI 通过清除缓存来更改注册表时npm cache clear --force,npm i --registry这些都不起作用。注册表根本没有改变,事实上npm i以任何形式运行后都被恢复了。
然后我尝试删除package-lock.json并node_modules运行安装。这导致我的 package-lock.json 中的许多版本发生更改,并导致我的特定项目构建失败。
我发现我遵循的步骤得到了我想要的,尽管它可能不是 npm 最佳实践的一部分。
不幸的是,该package-lock.json文件旨在对每个包的注册表进行硬编码。它的目的是。
我们可以想象 NPM 中的未来选项可以强制注册,并结合完整性检查来确保包相同。(请随时向核心团队发送功能请求)
截至目前,npm 尚未涵盖此用例。您必须忽略以package-lock.json绕过此限制。
(截至今日,NPM最新版本为8.13.2)
小智 3
"resolved": "https://xxx..."覆盖注册表不会替换package-lock.json.
如果之前创建的这个错误,您必须将其删除,然后再次运行您的npm i. 它将使用之前配置的注册表创建一个新的注册表。
| 归档时间: |
|
| 查看次数: |
12118 次 |
| 最近记录: |