前言
随着 Team 人员越来越多,项目间的代码复用显得越来越重要。比如:常用的框架/库、工具方法等。另外团队内部的代码模块化,也需要有一个机制来管理。目前 npm 是前端代码的包管理(类似 iOS 的 cocoapods、android 的 gradle)首选。于是,我尝试使用私有 npm 搭建一套前端仓库,用以在公司内部托管公共代码以及将代码模块化。
选型
npm+私有 git 仓库
制作&使用
1.新建私有 git 仓库(如:https://gitlab.com/mygroup/myproject.git),用group建立项目较方便代码的管理,也能作为npm的scope。
2.clone 仓库
1
git clone https://gitlab.com/mygroup/myproject.git
3.npm init
1
npm init --scope=mygroup
4.push 到仓库即可
5.安装
1
"@mygroup/myproject": "https://gitlab.com/mygroup/myproject.git"
6.使用
1
var myproject = require('@mygroup/myproject');
优缺点
缺点:不能使用 npm 直接 update
优点:简单直接
npmjs 官方托管
制作&使用
参考官方教程https://docs.npmjs.com/private-modules/intro
优缺点
缺点:需要支付每个月 7 刀; 不能使用 npm 直接 update;
优点:简单直接;开源&闭源项目同一托管
使用 verdaccio 自己托管
制作&使用
1.安装verdaccio
1
npm install --global verdaccio
2.启动服务
1
verdaccio
3.团队人员都绑定 registry
1
npm set registry http://verdaccio托管的ip地址:4873
注:如果自定义了域名和端口,那就按照配置来即可。 比如:笔者自定义域名为
npm.makeoptim.com
,端口为80
,则命令如下所示:npm set registry http://npm.makeoptim.com
4.增加用户
1
npm adduser --registry http://verdaccio托管的ip地址:4873
5.发布私有库
1
npm publish --registry http://verdaccio托管的ip地址:4873
6.安装私有库
1
npm i 私有库名称
7.使用私有库
1
var 私有库名称 = require('私有库名称');
优缺点
优点:免费;本地速度快&带公有库缓存;支持 yarn
缺点:需要自己托管维护
注:为了切换源方便,可以使用 nrm
安装
1
npm install -g nrm
增加私有源
1
nrm add 私有源名称 http://verdaccio托管的ip地址:4873
列出所有源(*表示现在正在使用的源)
1
2
3
4
5
6
7
8
9
$ nrm ls
* npm ---- https://registry.npmjs.org/
cnpm --- http://r.cnpmjs.org/
eu ----- http://registry.npmjs.eu/
au ----- http://registry.npmjs.org.au/
sl ----- http://npm.strongloop.com/
nj ----- https://registry.nodejitsu.com/
私有源名称 http://verdaccio托管的ip地址:4873
切换源
1
2
$ nrm use 自定义私有库名称
Registry has been set to: http://verdaccio托管的ip地址:4873
总结
基于上面选型中的分析,我最终选择了 verdaccio。私有 npm 的作用,不单单是作为包管理器,更是项目模块化的一种“约束”。这样一来,你就不会往一个模块随意加入本该属于另外一个模块的代码,也就是会逼迫你去做解耦。另外有了私有 npm,每个模块更“独立化”,能“专心”为其加入单元测试&持续集成等实践,使每个模块的质量能得到较好的保障,提高整体软件的质量。