likes
comments
collection
share

使用Verdaccio搭建npm私服

作者站长头像
站长
· 阅读数 68

本文将详细介绍如何使用Verdaccio搭建npm私有服务器,以及配置文件config.yaml的详细讲解。我们还将讲解如何发送邮件通知私有包更新,以及如何使用Docker部署。

一、搭建Verdaccio服务器

Verdaccio是一个简单、零配置的npm私有服务器,可以用于存储和管理私有npm包。以下是搭建Verdaccio服务器的步骤:

  1. 安装Node.js,确保Node.js和npm已安装在您的系统上。您可以通过在命令行输入以下命令来验证:
node -v
npm -v
  1. 全局安装Verdaccio:
npm install -g verdaccio
  1. 运行Verdaccio服务器:
verdaccio

默认情况下,Verdaccio会在http://localhost:4873上启动。此时,您已经成功搭建了一个基本的npm私有服务器。

二、创建和配置config.yaml

接下来,我们将创建并配置config.yaml文件,以便定制我们的Verdaccio服务器。

# 服务器监听地址
listen: 0.0.0.0:4873

# 数据存储路径
storage: ./storage

# 插件目录路径
plugins: ./plugins

# Web界面配置
web:
  # 是否启用Web界面
  enable: true
  # Web界面标题
  title: "My Private npm Registry"

# 用户身份验证配置
auth:
  htpasswd:
    # 用户文件存储路径
    file: ./htpasswd
    # 最大用户数量
    max_users: 1000

# 上游仓库配置
uplinks:
  npmjs:
    # 上游仓库的URL,这里我们使用官方的npm仓库
    url: https://registry.npmjs.org/

# 包配置
packages:
  # 适用于所有scope的包
  '@*/*':
    # 访问权限,$all表示所有人都可以访问
    access: $all
    # 发布权限,$authenticated表示只有经过身份验证的用户可以发布
    publish: $authenticated
    # 配置代理上游仓库,这里我们使用npmjs
    proxy: npmjs

  # 适用于所有包
  '**':
    # 同上
    access: $all
    publish: $authenticated
    proxy: npmjs

# 通知配置
notify:
  # 通知服务接口方式
  method: POST
  # 通知服务接口请求头
  headers: [{ 'Content-Type': 'application/json' }]
  # 通知服务接口请求地址
  endpoint: http://localhost:3000/notify
  # 通知服务接口请求体
  content: '{"text": "{{ name }}"}'
# 日志配置
logs:
  # 输出类型,如stdout表示输出到控制台
  - { type: stdout, format: pretty, level: http }

# 服务器URL前缀,用于生成正确的访问链接
url_prefix: http://localhost:4873

可在启动Verdaccio时通过-c--config选项来指定config.yaml文件路径。

verdaccio --config /path/to/your/config.yaml

或者使用-c简写:

verdaccio -c /path/to/your/config.yaml

node邮件通知服务简单示例

  1. 安装nodemailer模块,用于发送邮件:
npm install -g nodemailer
  1. 创建一个名为email-webhook.js的JavaScript文件,用于处理notify请求并发送邮件。
const Koa = require("koa");
const Router = require("koa-router");
const bodyParser = require("koa-bodyparser");
const nodemailer = require("nodemailer");

const app = new Koa();
const router = new Router();
const cors = require("@koa/cors");
app.use(cors());

// 配置邮件发送器,联系可使用QQ邮箱,user和pass分别填写邮箱地址和授权码
const transporter = nodemailer.createTransport({
  service: "QQ",
  auth: {
    user: "your_email@example.com",
    pass: "your_email_password",
  },
});

app.use(bodyParser());

router.post("/notify", async (ctx) => {
  const html = `<html>
                  <body>
                    <p>${ctx.request.body.text}</p>
                  </body>
                </html>
              `;
  const mailOptions = {
    from: "your_email@example.com",
    to: "recipient@example.com",
    subject: `私服有更新!!!`,
    html: html,
  };

  try {
    const info = await transporter.sendMail(mailOptions);
    console.log(`Email sent: ${info.response}`);
  } catch (error) {
    console.log(error);
  }

  ctx.status = 200;
});

app.use(router.routes());
app.use(router.allowedMethods());

const port = 3000;
app.listen(port, () => {
  console.log(`Email webhook listening on port ${port}`);
});

三、使用Docker部署Verdaccio

为了简化部署过程,我们可以使用Docker部署Verdaccio服务器。首先,创建一个Dockerfile,内容如下:

FROM node:latest

RUN npm install -g verdaccio

COPY config.yaml /verdaccio/conf/config.yaml

EXPOSE 4873

CMD ["verdaccio", "-c", "/verdaccio/conf/config.yaml"]

然后,使用以下命令构建Docker镜像:

docker build -t my-verdaccio .

最后,使用以下命令启动Docker容器:

docker run -d --name my-verdaccio -p 4873:4873 my-verdaccio

此时,您的Verdaccio服务器将在Docker容器中运行。

四、npm私服使用示例

首先,添加私有服务器到npm配置:

npm set registry http://localhost:4873

接下来,我们将介绍如何使用npm私服完成常见操作。

  1. 添加用户
npm adduser --registry http://localhost:4873

按照提示输入用户名、密码和邮箱地址,即可在私有服务器上创建一个新用户。

  1. 登录
npm login --registry http://localhost:4873

输入用户名、密码和邮箱地址,即可登录到私有服务器。

  1. 发布包

在您的npm项目目录下,使用以下命令发布包:

npm publish --registry http://localhost:4873

这将把您的npm包发布到私有服务器。

  1. 安装包

使用以下命令从私有服务器安装包:

npm install your-package-name --registry http://localhost:4873

这将从私有服务器安装指定的包。

  1. 更新包

更新npm包的版本号,然后使用以下命令发布更新:

npm publish --registry http://localhost:4873

这将把更新后的npm包发布到私有服务器,已配置的邮件通知将发送给指定的收件人。

  1. 删除包

使用以下命令从私有服务器删除包:

npm unpublish your-package-name --registry http://localhost:4873

这将从私有服务器删除指定的包。

通过以上示例,您已经了解了如何使用搭建好的npm私服来管理和使用私有npm包。

总结

通过本篇博客,您可以学习到如何使用Verdaccio搭建一个私有的npm服务器,以及如何配置各种功能,希望这篇博客能够帮助您更好地管理npm依赖,并提升您的开发效率。

转载自:https://juejin.cn/post/7212561868136218684
评论
请登录