npm私库搭建
搭建准备
- node
- cnpmjs
- mysql
- docker(可选)
方案:
-
sinopia
最近一次github更新4 years ago
太久未维护 -
verdaccio
sinopia的fork 担心也会停止维护 -
git+ssh
据说权限管理复杂 -
cnpmjs
淘宝 NPM 镜像 (本次选择)
npm私有库搭建步骤
- 克隆cnpmjs
安装依赖并启动,7001为注册服务,7002为web页 - 下载mysql
可选择安装workbench可视化编辑 - 配置cnpmjs数据库信息
指向数据库所在位置,配置登录信息 - 配置私库地址
更改config中的registryHost
修改libs下面的download连接格式
tips:可用nrm 管理npm仓库
发布npm包
-
添加用户到admins
cnpm adduser --registry=http://192.168.17.169:7001/
Username: admin
Password: 设置密码
Email: (this IS public) 上面修改后的邮箱地址 -
登录
cnpm login --registry=http://192.168.17.169:7001/ -
发布包
如果设置了scopes
// registry scopes, if don't set, means do not support scopes
scopes: [ '@cnpm', '@cnpmtest', '@cnpm-test', '@jnpm' ],
需要在发布包中的package.json上添加scope前缀
"name": "@jnpm/jhello",
然后才能执行发布的命令
cnpm publish --registry=http://192.168.17.169:7001/ -
下载包
cnpm install --registry=http://192.168.17.169:7001/
tips:设置scopes后,package.json中的依赖包也需要添加前缀, 像这样
"dependencies": {
"@jnpm/jumatable":"^1.0.0",
"@jnpm/jumahello":"^1.0.0"
}
一些报错信息
- mysql报错
动作:项目运行
错误信息:ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client
原因:mysql不同版本密码算法不一致
解决方法:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; - node报错
动作:执行node --harmony_generators dispatch.js时
错误信息:node: bad option: --harmony_generators
原因:当前node版本不支持--harmony_generators选项
解决方法:可以更换命令node dispatch.js来启动,或者升级node到最新版本 - publish模块报错
动作:cnpm publish [组件名]
错误信息:only allow publish with @cnpm, @cnpmtest, @cnpm-test scope(s)
原因:私有库设置了scopes
解决方法:在package.json中的name字段添加scopes前缀 - install模块报错
动作: npm install --registry=http://192.168.17.169:7001
错误信息:404
原因:安装时并没有从本地获取包,而是从线上获取
解决方法: cnpm install --registry=http://192.168.17.169:7001
过程:试了很多网上的解决方法,修改config中的registryHost;修改libs下面的download连接格式,最后更换cnpm才得以安装
使用docker
- 修改cnpmjs中的docker配置
将docs-dockerize-config.js与我们自定义添加的config-config.js中的配置修改一致 - 生成镜像
docker build -t juma/cnpm:127 . - 运行镜像
docker run juma/cnpm:127
tips:
删除容器:docker rm $(docker ps -aq);
删除镜像:docker rmi ID/NAME
网友评论