npm 私有源搭建
目标
搭建一套私有 npm 服务,支持以下功能:
- 发布管理私有 npm 包;
- 提供 npm 镜像服务,加速 npm 安装依赖速度;
方案
CNPM 为开发者提供了一套简单易用的私有源解决方案。它支持以下功能:
- 支持发布和管理私有源;
- 部署简单;
- 支持两种自动同步方案:
- 全量同步(全量同步指定源的所有 package);
- 只同步已有的 npm package;
- 支持手动同步,自动同步有一定时延,手动同步可以即时生效;
- 提供配套的客户端工具
cnpm,也支持官方 npm cli。
部署
CNPM 提供了多种方式部署,相对来说,使用 docker 部署的方式更加灵活方便。
前置依赖
- 安装 docker
- 安装 Docker Compose,大部分 docker 客户端都已经默认集成了 docker compose,不用重复安装;
部署过程
通过 CNPM git 仓库 下载 CNPM 源码。
定制系统配置
CNPM docker 方式部署的默认系统配置在 docs/dockerize/config.js 文件中,可在此更改相关配置,如管理员帐号、数据库配置等。
下面列举一些常见配置项:
scopes
scopes 值为字符串数组,用于定义本私有源的 scope。例如:
scopes: ['@cnpm', '@alife']
admins
admins 值为 name:email 的键值对,用于设置系统管理员。例如:
admins: {
// name: email
admin: 'admin@cnpmjs.org',
tony: 'tony@gmail.com'
},
mail 值为对象,用于设置发送系统邮件的邮箱帐号。例如:
mail: {
enable: false,
appname: 'cnpmjs.org',
from: 'cnpmjs.org mail sender <adderss@gmail.com>',
service: 'gmail',
auth: {
user: 'address@gmail.com',
pass: 'your password'
}
}
database
database 值为对象,用于设置数据库信息。CNPM 默认使用密码为空的 root 账户创建及管理 MySQL,建议单独创建 MySQL 用户。
**创建方式:**在源码根目录下找到 docker-compose.yml 文件,对 mysql-db 的 environment 配置中设置以下字段:
MYSQL_ROOT_PASSWORD: root666 #设置 root 密码MYSQL_USER: cnpmjs #创建 cnpmjs 用户MYSQL_PASSWORD: cnpmjs666 #cnpmjs 用户密码MYSQL_DATABASE: cnpmjs #mysql database
并删除 MYSQL_ALLOW_EMPTY_PASSWORD 字段(允许使用空密码登录)。
同时,修改系统配置:
database: {
db: 'cnpmjs', // 对应 MYSQL_DATABASE
username: 'cnpmjs', // 对应 MYSQL_USER
password: 'cnpmjs666', // 对应 MYSQL_PASSWORD
// 其他配置不建议更改
}
sourceNpmRegistry
sourceNpmRegistry 值为字符串,设置同步的源。默认为淘宝源: 'https://registry.npm.taobao.org'。
示例:
sourceNpmRegistry: 'https://registry.npm.taobao.org'
syncModel
syncModel 值为'none' ,'all' 或 'exist',用于设置系统同步模式。默认为 'none'。
- none: 不同步任何模块,从
sourceNpmRegistry中代理所有公共模块 - exist:只同步已有的模块
- all:同步所有模块
示例:
syncModel: 'exist', // 'none', 'all', 'exist'
alwaysAuth
alwaysAuth 值为布尔,设置是否始终都需要进行用户鉴权,即使是 cnpm install。默认为 false。
示例:
alwaysAuth: false
customReadmeFile
customReadmeFile 值为文件路径字符串,用于自定义首页文案。私有源服务部署成功后,会有一个 landing page 展示私有源的相关信息,这些信息通过 docs/web/readme.md 的 markdown 文件进行维护。想要自定义 landing page 可设置该项来替换这个文件。
其他参数请参考 docs/dockerize/config.js 文件。
构建 docker 镜像并启动
在当前代码库根目录下运行以下命令即可创建并运行镜像:
docker-compose up
该命令会使用当前的代码库构建 docker 镜像,并设置一个初始化的 MySQL 实例。当容器开始运行,将会创建两个 web 服务:
- http://127.0.0.1:7001 npm 私有源服务
- http://127.0.0.1:7002 前台 web 管理服务
一般来说,我们会在后台启动 docker 镜像:
docker-compose up -d
至此,npm 私有源服务已启动成功。我们如何使用该私有源呢?
使用
部署好 npm 私有源服务后即可开始使用,这里,默认本地已安装 node 及 npm。
使用 cnpm
-
全局安装 cnpm 命令行工具
npm install -g cnpm --registry=https://registry.npm.taobao.org -
安装完成后设置 cnpm 源
cnpm set registry http://127.0.0.1:7001 -
进入你的项目后,使用
cnpm install即可安装依赖。
发布私有包
-
确保您的 cnpm 源是私有源,如果不是,先将 cnpm 源设为私有源地址:
cnpm set registry http://127.0.0.1:7001 -
注册并登录私有源服务
按提示填写 username、密码、email 即可。
cnpm adduser -
设置私有包名为
@scope/package格式默认 scope 是 cnpm,可修改服务配置,详情查看上节【定制系统配置】。
示例如下所示:
{ "name": "@cnpm/my-package", "version": "1.0.2", "description": "a private package.", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "author": "", "license": "ISC", "dependencies": { "@cnpm/his-package": "^1.0.1" } } -
发布
cnpm publish -
给其他人增加发布权限
cnpm owner add user1 -
删除其他人的发布权限
cnpm owner rm user1
