写在前面:
上一个把包发到公有npm的已经被开除了,所以搭建私有npm基本是前端必备技能
搭建背景:
1.安全性
基于公司要求,有一些包不能对外发布里边有公司的业务代码,上一个发布的已经被公司通报了
2.稳定性
使用别人的包被删除,咱也得有备份不是
技术选型:
私有npm有很多我们用的是verdaccio, 原因是他配置很简单,整体功能也很强大
实操一下:
安装
npm install -g verdaccio
$> verdaccio
warn --- config file - /home/.config/verdaccio/config.yaml
warn --- http address - http://localhost:4873/ - verdaccio/3.0.0
核心配置文件
~/.config/verdaccio/storage 服务器包的存放地址
~/.config/verdaccio/config.yaml 配置文件(重要)
~/.config/verdaccio/htpasswd 用户
发包
1.创建目录(统一命名 @sftc)
2.npm init 初始化package.json (版本号是你上传组件的版本号)
3.组件开发
4.组件发包(注册,登录)
发包注意事项
- 设置npm本地镜像
nrm add snpm npm.sfxxxx.com
nrm use snpm
- 添加npm用户 登录npm用户(已添加)
npm adduser npm login
- 发布 (修改package.json version)
npm publish
- 删除发布包(不推荐使用)
npm unpublish @version --force
配置文件解析
storage: ./storage #存包地址
plugins: ./plugins #插件
web:
title: 同城npm #标题
auth:
htpasswd:
file: ./htpasswd #用户信息
uplinks: #上行链路
npmjs:
url: https://registry.npmjs.org/
cnpmjs:
url: https://registry.npmmirror.com/
dwnpm:
url: https://artifactory.sf-express.com/artifactory/api/npm/npm-sf-local/
packages: #软件包访问方式
'@*/*':
access: $all
publish: $authenticated
proxy: cnpmjs
'dwnpm/*':
proxy: cnpmjs
'**':
proxy: cnpmjs
log: { type: stdout, format: pretty, level: http } #日志
i18n: #国际化
web: zh-CN
listen: 0.0.0.0:8999 # 设置监听地址,0.0.0.0匹配本机地址 #域名访问必备
常见问题解析
1.想用域名解析到ip+端口,一定要要修改
listen: 0.0.0.0:8999 # 设置监听地址,0.0.0.0匹配本机地址
2.配置环境变量VERDACCIO_PUBLIC_URL, 否则你资源路径会404
pm2 start process.json
{
"apps": [
{
"name": "verdaccio",
"script": "verdaccio",
"env": {
"NODE_ENV": "production",
"VERDACCIO_PUBLIC_URL": "http://npm.sfxxxx.com"
},
"env_production": {
"NODE_ENV": "production",
"VERDACCIO_PUBLIC_URL": "http://npm.sfxxxx.com"
}
}
]
}
3.索引其他源的包,特定规则去特定域名拉包 很常见的能力
'dwnpm/*':
proxy: cnpmjs
4.接通知
notify:
method: POST
headers: [{ 'Content-Type': 'application/json' }]
endpoint: xxxx?id=xxx
content: '" {{ publisher.name }}发布了{{ name }}{{#each versions}} v{{version}}{{/each}} " '
有这些基本verdaccio就算配置完了,大家有啥问题可以随时评论区沟通