我如何在无法访问它的机器上使用范围内的 npm 包填充对私有存储库的访问?
How can I shim access to a private repository with scoped npm packages on a machine that can't access it?
假设我有一个私有的、范围限定的 NPM 存储库,它位于公司防火墙后面。我想在另一台无法连接到 VPN 的计算机上设置我的项目,因此它将无法访问该私有存储库。
我如何设置我的项目以轻松地从本地文件夹导入这些依赖项and/or我的本地 npm 缓存并跳过私有仓库?
也就是说,如果我的 package.json 文件有...
"dependencies": {
"@privateRepo/some-library-framework": "4.2.1"
}
... 我无法访问服务器,但我可以获得所需的文件,这些文件会从位于可以访问的计算机上的另一个 node_modules
文件夹中安装回购
我尝试从 @privateRepo
中的包中获取文件并为每个文件使用 npm cache add D:\path\to\lib\with\packageDotJsonInside
,但仍然...
Not Found - GET https://registry.npmjs.org/@privateRepo%2some-library-framework - Not found
...当我尝试 npm i
其余部分时。
我认为这意味着我需要在 .npmrc
中设置一些东西,例如 ...
registry=https://registry.npmjs.org/
@test-scope:registry=http://nexus:8081/nexus/content/repositories/npm-test/
//nexus:8081/nexus/content/repositories/npm-test/:username=admin
//nexus:8081/nexus/content/repositories/npm-test/:_password=YWRtaW4xMjM=
email=…
... 您通常会在其中设置身份验证,但也会在其中将 URL 设置为范围包。我想我想在这里设置@privateRepo:registry=http://localhost/something/something
。
但我认为这也意味着我至少需要创建一个本地网络服务器(或 npm repo?)来响应请求(然后我可能正在寻找类似 verdaccio 的东西?)。
那么,最简单的情况是,有没有办法强制应用程序使用缓存版本,或者我是否需要填充更多内容?如果没有,创建本地存储库以代替私有存储库提供这些包的最简单方法是什么?
没有比这更好的了,最简单的答案 确实 似乎是设置本地 npm 存储库。然后,您可以将 .npmrc
设置为指向范围私有注册表的本地主机,而不是 VPN 后面的 "real" 版本。
事实证明,Verdaccio 实际上就是这样做的——您可以 也 使用它来托管 "real" 私人仓库,包括后面你的防火墙,但安装在你的开发箱上将允许你将你的 npm 包提供给本地的任何新代码库。
this video that's linked on Verdaccio's docs site对此进行了详细描述。这是快速版本:
- 安装 verdaccio:
npm install --global verdaccio
- 运行 颜色:
verdaccio
- 然后您可以在
http://localhost:4873/
(或其他地方,如果您更改了默认设置)查看它的界面
- 创建用户:
npm adduser --registry http://localhost:4873
- 登录:
npm login --registry http://localhost:4873
- 如果需要,您现在也可以在网络上以该用户身份登录 UI。
- 导航到您的包的文件。导航 到 包特定的文件夹。
- 也就是说,如果您从另一个项目的
node_modules
中提取所有包,则需要进入单个包的 package.json
文件所在的每个文件夹才能发布它。
- 发布包:
npm publish --registry http://localhost:4873
- 您可以通过刷新网页 "took" 来仔细检查 "took"。
- 对每个附加包重复此操作。
就是这样!您现在拥有一个 npm 存储库,其中包含可用于删除 运行 npm i
的 VPN 要求的软件包。只需将新版本的软件包转移到本地 npm 并根据需要发布它们。
您需要在您的 .npmrc
中为此注册表设置一个作用域条目,但您已经在防火墙后面为您的存储库这样做了,所以没什么大不了的,对吧?
准备移动支票以获得更好的答案,但这似乎应该有效。
假设我有一个私有的、范围限定的 NPM 存储库,它位于公司防火墙后面。我想在另一台无法连接到 VPN 的计算机上设置我的项目,因此它将无法访问该私有存储库。
我如何设置我的项目以轻松地从本地文件夹导入这些依赖项and/or我的本地 npm 缓存并跳过私有仓库?
也就是说,如果我的 package.json 文件有...
"dependencies": {
"@privateRepo/some-library-framework": "4.2.1"
}
... 我无法访问服务器,但我可以获得所需的文件,这些文件会从位于可以访问的计算机上的另一个 node_modules
文件夹中安装回购
我尝试从 @privateRepo
中的包中获取文件并为每个文件使用 npm cache add D:\path\to\lib\with\packageDotJsonInside
,但仍然...
Not Found - GET https://registry.npmjs.org/@privateRepo%2some-library-framework - Not found
...当我尝试 npm i
其余部分时。
我认为这意味着我需要在 .npmrc
中设置一些东西,例如
registry=https://registry.npmjs.org/
@test-scope:registry=http://nexus:8081/nexus/content/repositories/npm-test/
//nexus:8081/nexus/content/repositories/npm-test/:username=admin
//nexus:8081/nexus/content/repositories/npm-test/:_password=YWRtaW4xMjM=
email=…
... 您通常会在其中设置身份验证,但也会在其中将 URL 设置为范围包。我想我想在这里设置@privateRepo:registry=http://localhost/something/something
。
但我认为这也意味着我至少需要创建一个本地网络服务器(或 npm repo?)来响应请求(然后我可能正在寻找类似 verdaccio 的东西?)。
那么,最简单的情况是,有没有办法强制应用程序使用缓存版本,或者我是否需要填充更多内容?如果没有,创建本地存储库以代替私有存储库提供这些包的最简单方法是什么?
没有比这更好的了,最简单的答案 确实 似乎是设置本地 npm 存储库。然后,您可以将 .npmrc
设置为指向范围私有注册表的本地主机,而不是 VPN 后面的 "real" 版本。
事实证明,Verdaccio 实际上就是这样做的——您可以 也 使用它来托管 "real" 私人仓库,包括后面你的防火墙,但安装在你的开发箱上将允许你将你的 npm 包提供给本地的任何新代码库。
this video that's linked on Verdaccio's docs site对此进行了详细描述。这是快速版本:
- 安装 verdaccio:
npm install --global verdaccio
- 运行 颜色:
verdaccio
- 然后您可以在
http://localhost:4873/
(或其他地方,如果您更改了默认设置)查看它的界面
- 然后您可以在
- 创建用户:
npm adduser --registry http://localhost:4873
- 登录:
npm login --registry http://localhost:4873
- 如果需要,您现在也可以在网络上以该用户身份登录 UI。
- 导航到您的包的文件。导航 到 包特定的文件夹。
- 也就是说,如果您从另一个项目的
node_modules
中提取所有包,则需要进入单个包的package.json
文件所在的每个文件夹才能发布它。
- 也就是说,如果您从另一个项目的
- 发布包:
npm publish --registry http://localhost:4873
- 您可以通过刷新网页 "took" 来仔细检查 "took"。
- 对每个附加包重复此操作。
就是这样!您现在拥有一个 npm 存储库,其中包含可用于删除 运行 npm i
的 VPN 要求的软件包。只需将新版本的软件包转移到本地 npm 并根据需要发布它们。
您需要在您的 .npmrc
中为此注册表设置一个作用域条目,但您已经在防火墙后面为您的存储库这样做了,所以没什么大不了的,对吧?
准备移动支票以获得更好的答案,但这似乎应该有效。