1

假设我有一个私有的、有范围的 NPM 存储库,它位于公司防火墙后面。我想将我的项目设置在另一台无法连接到 VPN 的计算机上,因此它将无法访问该私人仓库。

如何设置我的项目以轻松地从本地文件夹和/或本地 npm 缓存导入这些依赖项并跳过私有仓库?

也就是说,如果我的 package.json 文件有...

"dependencies": {
   "@privateRepo/some-library-framework": "4.2.1"
}

...而且我无法访问服务器,但我可以获取所需的文件,并且可以从node_modules位于可以访问 repo 的机器上的另一个文件夹中安装这些文件。

我尝试从包中获取文件@privateReponpm 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的东西?)。

那么,最简​​单的情况是,有没有办法强制应用程序使用缓存版本,还是我需要更多的填充?如果不是,那么创建本地存储库以代替私有存储库为这些包提供服务的最简单方法是什么?

4

1 回答 1

1

没有什么比这更好的了,最简单的答案似乎是设置一个本地 npm 存储库。然后,您可以设置.npmrc指向 localhost 的范围私有注册表,而不是 VPN 后面的“真实”版本。

事实证明,Verdaccio实际上就是这样做的——你也可以用它来托管一个“真正的”私有仓库,包括在你的防火墙后面,但是安装在你的开发盒上将允许你将你的 npm 包提供给任何新的代码库本地。


链接在Verdaccio 的文档网站上的视频对此进行了一些详细的描述。这是快速版本:

  • 安装 verdaccio:npm install --global verdaccio
  • 运行 verdaccio:verdaccio
    • http://localhost:4873/然后,您可以在(或其他地方,如果您更改默认值)查看其界面
  • 创建用户:npm adduser --registry http://localhost:4873
  • 登录:npm login --registry http://localhost:4873
    • 如果需要,您现在也可以在 Web UI 上以该用户身份登录。
  • 导航到您的包的文件。导航特定于包的文件夹。
    • 也就是说,如果您从另一个项目中提取所有包node_modules,则需要进入单个包文件所在的每个文件夹package.json以发布它。
  • 发布包:npm publish --registry http://localhost:4873
    • 您可以通过刷新 Web UI 来仔细检查它是否“被占用”。
  • 对每个附加包重复此操作。

而已!您现在有一个 npm 存储库,可用于删除运行时的 VPN 要求npm i。只需将新版本的软件包转移到您的本地 npm 并根据需要发布它们。

您将需要在您的 中为此注册表设置一个范围条目.npmrc,但您已经在防火墙后面为您的 repo 这样做了,所以没什么大不了的,对吧?

准备移动支票以获得更好的答案,但这似乎应该有效。

于 2020-03-27T17:54:26.840 回答