英文:
How do I tell npm to install custom library dependencies from a custom library from npm central?
问题
I'm using Angular 14. I have this custom library project with this folder structure
- projects
- my-library
- package.json
- my-library
In package.json, I have
{
"name": "my-library",
"version": "7.0.0",
"peerDependencies": {
"@angular/common": "^14.1.2",
"@angular/core": "^14.1.2"
},
"dependencies": {
"parse-domain": "^3.0.3"
}
}
I have my library stored in a custom repo. However, when I go and try and install this custom library in another project using
$ npm install my-library@latest --registry=https://my-custom-repo.com/storage/npm/artifacts/ --legacy-peer-deps
npm ERR! code E404
npm ERR! 404 Not Found - GET https://my-custom-repo.com/storage/npm/artifacts/parse-domain - not_found
npm ERR! 404
npm ERR! 404 'parse-domain@^3.0.3' is not in this registry.
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\npm-cache_logs\2023-04-10T18_27_45_000Z-debug-0.log
The error above indicates it is attempting to look for the custom library dependency in the custom repo, even though it is just in the normal npm repo. How do I instruct the build command to install other dependencies from npm central rather than my custom repo?
英文:
I'm using Angular 14. I have this custom library project with this folder structure
+ projects
+ my-library
- package.json
In package.json, I have
{
"name": "my-library",
"version": "7.0.0",
"peerDependencies": {
"@angular/common": "^14.1.2",
"@angular/core": "^14.1.2"
},
"dependencies": {
"parse-domain": "^3.0.3"
}
}
I have my library stored in a custom repo. However, when I go and try and install this custom library in another project using
$ npm install my-library@latest --registry=https://my-custom-repo.com/storage/npm/artifacts/ --legacy-peer-deps
npm ERR! code E404
npm ERR! 404 Not Found - GET https://my-custom-repo.com/storage/npm/artifacts/parse-domain - not_found
npm ERR! 404
npm ERR! 404 'parse-domain@^3.0.3' is not in this registry.
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\npm-cache\_logs23-04-10T18_27_45_000Z-debug-0.log
The error above indicates it is attempting to look for the custom library dependency in the custom repo, even though it is just in the normal npm repo. How do I instruct the build command to install other dependencies from npm central rather than my custom repo?
答案1
得分: 1
- 第一个解决方案
您可以通过为您的库设置作用域来解决问题。
简而言之,您的包应该不是my-library
,而是@my-scope/my-library
,就像@angular/common
一样。
当包有作用域时,您可以在.npmrc
中为特定作用域指定特定的注册表,例如:
@my-scope:registry=https://my-custom-repo.com/storage/npm/artifacts/
但对于所有其他包,注册表将保持不变(例如.npmrc
中的registry
字段)。
有关更多信息,请查看https://docs.npmjs.com/cli/v9/using-npm/scope
- 第二个解决方案
如果您可以将所有依赖项发布到您的自定义注册表,您可以忽略使用作用域,将所有包发布到您的注册表(或只是通过它代理到npmjs),然后只使用您的注册表来管理所有包,例如.npmrc
:
registry=https://my-custom-repo.com/storage/npm/artifacts/
- 手动处理
您可以在您的package.json
中仅保留公共包(删除my-library
),然后运行npm i
,它将起作用。
然后,您可以将my-library
添加到包中,并在.npmrc
中将目标注册表设置为私有:
registry=https://my-custom-repo.com/storage/npm/artifacts/
然后再次运行npm i
。
英文:
- 1st solution
You can solve your problem by scoping your library.
In short, your package should look not my-library
, but @my-scope/my-library
. Just like @angular/common
.
When package is scoped, you can target specific registry for specific scope in .npmrc
, for example:
@my-scope:registry=https://my-custom-repo.com/storage/npm/artifacts/
But for all other packages registry will be the same (e.g. .npmrc
registry
field)
For more info check https://docs.npmjs.com/cli/v9/using-npm/scope
- 2nd solution
If you can publish all of your dependecies to your custom registry, you can ignore using scopes, puplish all packages to your registry (or just proxy to npmjs through it) and then just use your registry for all packages, for example .npmrc
:
registry=https://my-custom-repo.com/storage/npm/artifacts/
- Manual hack
You can leave only public packages in your package json (remove my-library
), then run npm i
, it will work.
Then u can add my-library
to package and target registry to private in .npmrc
:
registry=https://my-custom-repo.com/storage/npm/artifacts/
and run npm i
again
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论