65.9K
CodeProject 正在变化。 阅读更多。
Home

托管私有 NPM 注册表

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2020年9月21日

CPOL

3分钟阅读

viewsIcon

8790

downloadIcon

59

如何托管私有 NPM 注册表

附件包含两个文件夹

  • package-example” - 这是一个示例 NPM 包。我将把它发布到私有注册表。
  • package-client” - 这是一个示例 NODE 应用程序。它将从私有注册表中提取示例包,并在“index.js”文件中使用它。

私有 NPM 注册表

很多选项可以在您的计算机上运行私有 NPM 注册表。在本笔记中,我选择了“Verdaccio”。您可以下载 Verdaccio 并运行它,也可以提取 docker 镜像并在容器中运行它。在本笔记中,我选择使用 docker。如果您不熟悉 docker,可以看看我之前的笔记

docker pull verdaccio/verdaccio:4

截至本笔记准备时,最新的 Verdaccio 版本是 4。提取 Verdaccio 镜像后,我们可以启动容器。

docker run -d --name verdaccio -p 4873:4873 verdaccio/verdaccio:4

要验证容器是否已启动,您可以转到 URL - “https://:4873/”查看注册表中托管的包。如果您希望在计算机启动时启动容器,可以使用“systemd”,如果您使用基于 Ubuntu 的计算机。您可以在“/etc/systemd/system”目录中放置一个名为“verdaccio.service”的文件。

[Unit]
Description=Verdaccio npm registry service
After=docker.service
Wants=network-online.target docker.socket
Requires=docker.socket
 
[Service]
Restart=always
ExecStart=/usr/bin/docker container start -a verdaccio
ExecStop=/usr/bin/docker container stop -t 20 verdaccio
 
[Install]
WantedBy=multi-user.target

然后,您可以使用以下命令操作服务

sudo systemctl start verdaccio.service
sudo systemctl stop verdaccio.service
sudo systemctl enable verdaccio.service
sudo systemctl disable verdaccio.service
sudo systemctl status verdaccio.service

发布包

在附带的“package-example”文件夹中,我有一个由“package.json”定义的简单 NPM 包。

{
  "name": "@example/package-example",
  "version": "1.0.0",
  "description": "An example npm package",
  "main": "index.js",
  "author": "Song Li",
  "license": "ISC"
}

您可能注意到包名称是“@example/package-example”。它是一个范围包。范围包帮助我们按范围分组包。例如,“@angular”范围将所有 angular 包分组在一起。为了简单起见,“@example/package-example”包只有一个“index.js”文件来导出一个静态字符串消息。

module.exports = 'This is a string in the @example/package-example';

package.json”文件中的“main”属性告诉 node 在哪里找到 NPM 包的入口点。

  • 如果 package.json 包含一个 main 属性,则使用它。
  • 如果没有 main 属性,则尝试加载
    • index.js
    • index.json
    • index.node

要将包发布到私有注册表,我们可以在“package-example”文件夹中发出以下命令。

npm adduser --registry https://:4873
npm publish --registry https://:4873
  • npm adduser”设置了注册表所需的凭据。一旦成功,它会将凭据保存在用户主目录中的“.npmrc”文件中。下次将包发布到注册表时,我们不再需要提供凭据;
  • --registry”属性告诉 NPM 使用哪个注册表。

我们还可以在包目录中放置一个“.npmrc”文件来关联 NPM 范围和注册表。

@example:registry=https://:4873/

使用本地“.npmrc”文件,然后我们可以使用以下命令简单地发布包

npm publish

要检查我们是否已成功发布包,我们可以发出以下命令

npm view @example/package-example versions

要取消发布包,我们可以使用以下命令

npm unpublish @example/package-example@1.0.0

安装包

在附带的“package-client”文件夹中,我有一个使用“@example/package-example”包的示例 node 应用程序。

{
  "name": "package-client",
  "version": "1.0.0",
  "description": "An example NPM package client",
  "main": "index.js",
  "author": "Song Li",
  "private": true,
  "license": "ISC",
  "dependencies": {
    "@example/package-example": "^1.0.0"
  }
}

它是一个简单的 node 应用程序,在“index.js”文件中打印出“@example/package-example”包中的静态字符串。

const str = require('@example/package-example');
console.log(str);

为了安装“@example/package-example”而无需指定“--registry”属性,我们可以在本地文件夹中放置一个“.npmrc”文件来关联“@example”范围和注册表 URL。

@example:registry=https://:4873/

然后,我们可以安装“@example/package-example”包并运行该应用程序。

npm install
node index.js

如果一切顺利,我们可以看到“@example/package-example”包已从私有包中成功安装,并且应用程序运行成功。

附加说明

默认情况下,docker 容器将其发布的包保存在自身中。为了备份包,我们可以将容器提交到镜像。我们可以参考“docker commit”文档以获取详细信息。

关注点

  • 这是一篇关于如何托管私有 NPM 注册表的笔记。
  • 希望您喜欢我的博文,并希望这篇笔记能以某种方式帮助您。

历史

  • 2020 年 9 月 18 日:第一次修订
© . All rights reserved.