前言
在工作中,公司有很多内部的包并不希望发布到npm官网仓库,因为可能涉及到一些私有代码不能暴露。对于前端来讲,这时就可以选择在公司内网搭建npm私有仓库。当前比较主流的几种解决方案:verdaccio、nexus、cnpm。大家可以按照自己的需求选择。本文中采用的是cnpm私服搭建。
cnpm私服搭建流程
1. 安装node,新的node版本会自带npm
官网地址:nodejs.org/zh-cn/
2. 拉取代码,对应公司需求做相应更改
git clone https://github.com/cnpm/cnpmjs.org.git
3. 修改配置文件 ./config/index.js
// 仓库站点访问端口
registryPort: 7001,
// 页面访问端口
webPort: 7002,
// 外网可以访问的话则注释,否则只能内网访问
bindingHost: '127.0.0.1',
// 数据库配置
database: {
db: 'cnpmjs', // 数据库
username: 'root', // 数据库用户名
password: '', // 数据库密码
dialect: 'mysql', // 数据库类型 'mysql', 'sqlite', 'postgres', 'mariadb'
host: '', // 数据库服务地址
port: 3306 // 端口
}
// 用户配置 key 为用户名和密码,value为邮箱
admins: {
harlie: 'yanghui3021@163.com',
fengmk2: 'fengmk2@gmail.com',
admin: 'admin@cnpmjs.org',
dead_horse: 'dead_horse@qq.com',
},
// true为只有管理员可以发布,false是任何人发布都必须带有私有标识
enablePrivate: false,
//私有标识前缀
scopes: [ '@harlie','@cnpm', '@cnpmtest' ],
//同步模块上游registry地址
sourceNpmRegistry: 'https://registry.npm.taobao.org',
// 同步模式 'none' 不进行同步 , 'all' 定时同步所有源 registry 的模块, 'exist' 只同步已经存在于数据库的模块
syncModel: 'exist',
// 同步间隔时间
syncInterval: '10m',
4. 数据库创建 (MySQL)
create database cnpmjs; // 创建数据库
use cnpmjs;
source cnpmjs.org/docs/db.sql; // 拉取项目的 docs/db.sql
5. 命令启动执行 (到这里私有库的搭建已经完成,是不是并不复杂)
node dispatch.js
启动成功后就可以通过 http://x.x.x.x:7002 查看网址页面。
私有库使用
1. 使用nrm镜像源管理工具添加源
npm install nrm -g
nrm add cnpmorg http://42.192.37.59:7001 // 添加源
nrm use cnpmorg // 使用cnpmorg源,名字自己定义
nrm ls
2. 内部源使用
···NPM···
npm config set registry http://x.x.x.x:7001
···CNPM···
cnpm config set registry http://x.x.x.x:7001
···YARN···
yarn config set registry http://x.x.x.x:7001
3. 本地项目包发布
- npm login 如下图所示则登陆成功
- npm publish 包发布
- npm view @harlie/cnpm-test
可以看到所发布的包的详情,通过网址页面搜索cnpm-test ,可以在页面查看相应版本信息。