托管私有 NPM 注册表
如何托管私有 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 日:第一次修订