为什么要搭建npm私服?
- 公司内部通常都会开发一些私有包,统一管理,方便使用。
- 安全性,由于公司内部开发的模块和一些内容并不希望其他无关人员能够看到,但是又希望内部能方便使用。
- 加速,自己搭建npm 服务器,本身可以自带常用package的缓存, cnpm 有一些包存在路径问题,而npm的速度有些感人,自建的服务器会缓存下载过的包,能节省时间。
要体验上面的效果,需要把npm注册指向到本地私服地址
- 持久使用npm config set registry http://url:port
- 临时使用npm install vue-router --registry http://url:port
前置知识,添加npm仓库,代理,组
点击在左侧菜单Repositories,可以看到仓库类型列表,如下:
- (右侧红框标注)group表示分组,hosted表示私有,proxy表示远程代理
- 若registry配置为group(包括hosted和proxy),首先会从hosted取,若无则从proxy取并缓存,下次则会从缓存取。
1、点击Create repository创建仓库,使用hosted,用于存放自己的私有包
2、点击Create repository创建仓库,使用proxy,用于将包请求代理到外网地址
3.第三次点击Create repository,选择group
下面Member repositories里选择之前添加的2个移动右边
4.配置与验证npm仓库
1、设置nodejs的默认仓库地址
持久使用,命令行里执行 npm config set registry http://url:port
我们xx地址是http://nexus.xxx.com:11081/repository/npm-public/
执行npm config set registry http://nexus.xx.com:11081/repository/npm-public/后,可以在当前用户目录下的.npmrc文件进行查看,内容如下
临时使用,命令行里执行 npm install vue-router --registry http://url:port
2、验证
随便进入一个目录,
初始化package, npm init -y
npm --loglevel info install jquery,安装jquery并显示日志
查看是否从自己的仓库地址拉取包
发布npm包到私服
npm发布包是需要先登录的,默认是登录到npm官方服务器,若registry已更改为其它地址则可能登录失败,而这里我们只是想把包发布到自己私有的服务器上。
1、创建nx-deploy角色
给角色赋于一个nx-all权限
2、创建deployer 用户
密码也为deployer,同时设定角色为nx-deploy
3、客户端的.npmrc配置
registry=http://域名:端口号/repository/npm-group/
always-auth=true
_auth="ZGVwbG95ZXI6ZGVwbG95ZXI="
_auth是 username:password 的base64值,这样设置的好处是publish时就不用login了,可查找在线转base64工具转码
4、package.json 配置,发布
"publishConfig" : {
"registry" : "http://域名:端口号/repository/npm-hosted/"
}
首先创建一个空目录,npm init -y初始化package.json文件
新建index.js,并导出一个方法
修改package.json,包含包名,版本号,publishConfig(最重要)
若下图所示,修改完成后,运行npm publish,即可发布成功