verdaccio搭建
npm私有仓库
前言
随着前端技术的不断发展,前后端分离已成为主流趋势,这就导致了前端承受的分工压力会越来越大,前端项目也将变得十分庞杂,因此在技术方面会考虑按照业务线进行拆分成几个业务系统。这些系统之间如何共用一套公司内部的组件资源库?如果每个工程都拷贝一份,会增加大量的升级和运维工作。上传到npm库是个很不错的选择,不同的系统都指向一个npm源,然后通过npm install就可以搞定,所以搭建一套公司内部的npm库就显得非常有必要。
01
搭建npm私服的好处
依赖包在公司内网的服务器上,不需要发布到外网
下载依赖包和发布包都可以配置权限
各个项目依赖包可以直接缓存到npm私有服务器上,不用在外网的npm中下载,下载速度得到提升
02
Verdaccio简介
Verdaccio 是一个简单的、零配置本地私有 npm 软件包。它是 sinopia 开源框架的一个fork ,github start 7000+。由于sinopia 三年前就已经没有人进行维护了,缺陷也比较多。Verdaccio成为了市场上最主流的本地私有npm插件。Verdaccio开箱即用,拥有自己的小型数据库,能够代理其他注册表(例如npmjs.org),一路缓存下载的模块。
03
离线搭建verdaccio环境
根据公司信息安全要求,开发工作均在内网进行,为了不影响开发效率,让开发人员可以更方便的使用npm服务器,就必须自建npm私有仓库。Verdaccio通常会使用npm进行安装使用,因在内网中无法执行安装,我们使用官方提供的docker镜像安装,这对于开发,持续集成还是比较简单的。在服务启动方面,建议不要用root用户, 不然会有一些特殊的问题。具体步骤如下:
安装docker,配置docker服务
加载docker镜像,使用bridge方式搭建网桥
将启动容器加入脚本(针对redhat,其他系统略有不同)
运行Verdaccio镜像,创建一个容器,依赖包通过在外网打包,上传至内网服务器verdaccio/storage目录下即可。
04
Verdaccio的使用
我们目的就是为了把项目中需要用到的依赖包放到内网,直接从内网下载。我们如何把包放到搭好的verdaccio里面呢,具体的流程如下:
verdaccio 的特点是,安装在哪个目录下运行,就会在对应的目录下创建自己的文件。目录下默认有两个文件:config.yaml和storage,htpasswd 是添加用户之后自动创建的;第一次启动默认的config.xml文件是从原始文件default.yaml拷贝而来,可先修改verdaccio 原始的default.yaml。verdaccio继承了sinopia,端口号4873依然不变。
运行Verdaccio。正常启动后,通过虚拟机地址、端口进行访问,看到如下界面,就证明我们的私服搭建成功了。
配置npm,使用npm publish命令发布包:
npm install,这个命令是默认下载当前定位文件夹下package.json文件中需要的所有包,包括间接依赖的包。第一次下载之后的包都会缓存在我们的私服上,之后我们就可以在私服上下载依赖包。(小贴士:npm install执行成功后,会在项目下自动生成package-lock.json文件,如果切换npm私服地址,需删除该文件后重新执行npm install)
05
踩过的坑
node-sass报错
部署到内网后npm install缓存包时如果用到node-sass,会出现报错,解决方法是从有外网的电脑里面把C:\Users\Acer\AppData\Roaming\npm-cache\node-sass\里的win32-x64-57_binding.node拷出来,放到需要npm install的内网电脑中,然后新建系统变量。变量名:SASS_BINARY_PATH变量值:win32-x64-59_binding.node的所在目录位置。再次执行npm install下载node-sass就正常了。
npm-shrinkwrap.json版本锁定报错
在项目中使用npm-shrinkwrap.json来锁定版本,在安装包的时候可能会报错“Maximum call stack size exceeded”,删除npm-shrinkwrap.json、yarn.lock和node_modules。重新生成package-lock.json文件即可。
hi,新朋友扫码关注我们呦~
Merry Christmas