关于npm相信做为前端开发工程师必定不陌生,不过大部分人基本上只会使用3个命令,npm install
,npm run dev
,npm run build
,不过本文并不介绍npm常见的命令,本文主要介绍了我司内网npm的搭建方式,和前端开发在使用过程当中经常会遇到的问题,但愿你们在使用过程当中可以对其了解更深入,本文阅读时间约须要5分钟。前端
我司的内网npm仓库是在2017年中旬开始搭建并使用的,在此以前你们都是采用复制粘贴的方式来搬运nodemodules,17年中旬开始在内网搭建了一套cnpm内网仓库,主要采用淘宝开源的cnpm仓库,当时尚未打通内网访问淘宝镜像的地址,所以仓库更新包仍是要每隔一段时间才会去更新一下,致使内网一些包的版本老是不是最新的;java
19年开始公司开始采用nexus从新部署了一套私有仓库,用该方案搭建主要是能够一套仓库同时兼顾各种开发语言,同时直接打通了镜像源地址,让内网无需再为包没法下载或者版本更新不及时的事情发愁。node
官方部署github地址: https://github.com/cnpm/cnpmj...python
官方部署github地址:https://github.com/sonatype/d...nginx
目前我司上述两种仓库都依然在内网并存,对于上述两种仓库有以下建议:git
npm install
下载遇到404
问题npm config get registry
查看当前仓库地址是否指向内网的仓库npm install --ignore-scripts
该命令能够跳过该脚本的下载(大部分遇到的都是node-sass这种包会有脚本,后文会讲解如何在内网安装这种包)若是公司有内网开发的话,不少同窗应该会遇到这个问题,每每你们的作法可能都是从外网拷贝传到内网指定目录下,但这种方式过于繁琐,可维护性比较差,那么目前业界是怎么作的呢?github
目前作的比较好的是淘宝,他们的作法是定时同步github上面的node-sass到本身的服务器上,而后开发人员在本地命令行中修改node-sass下载脚本的地址便可docker
npm config set SASS_BINARY_SITE=http://npm.taobao.org/mirrors/node-sass
npm
那么对应到各位的公司里面应该如何作呢?
主要有以下两个方案:json
1. 公司内网服务器nginx配置转发路由,并让机房开通下面代理淘宝地址的权限,nginx配置以下: ... location ^~ /mirrors/ { proxy_pass http://cdn.npm.taobao.org/dist/ } ... 2. 前端开发在本地命令行中修改binary_site的地址(xxx是内部服务器本身的ip): npm config set SASS_BINARY_SITE=http://xxx.xxx.xxx/mirrors/node-sass 3. 执行下载命令,便可正常下载node-sass npm install node-sass
npm config set SASS_BINARY_SITE=http://gitlab.xxx.xxx/node-sass
淘宝镜像地址: https://npm.taobao.org/mirrors
另外,上述方案不只仅适用于node-sass
,一样适用于全部相似node-sass
须要下载脚本的包,好比electron
,puppeteer
...等等,算是一个通用的解决方案,建议使用第一种代理通道的方案,向公司申请下权限便可
目前我司在使用nexus做为仓库的过程当中遇到以下另个问题:
遇到这种状况,只须要稍等片刻,而后再从新多执行几回npm install便可
ps:虽然该种状况一会能好,和网络关联性较大,但笔者强烈怀疑是nexus内部机制的一些bug,一些超时时间和重试机制设置作的并很差
接下去会按照上述搭建代理通道的方式来解决该问题
package-lock.json是在学习了yarn.lock以后在npm5版本上面新增的功能,该文件的主要做用是用来锁住package.json中的版本号,使得每一次下载的npm包的版本都是同样的,而且下载的来源也都是同一个。
不过我的有不同的见解,目前从开发实践中来看建议你们不要将package-lock.json提交到git上做为版本管理;主要是因为目前的包遵循semver语义化版本的原则来进行更新包的,基本上不太会出现小版本升级致使api变动,靠谱的包升级都是修复bug或者是相关优化,若是把package-lock.json加入版本管理以后,后面该包修复bug业务方更新起来是一个比较麻烦的事情,若是该包使用的业务方过多,那么要推进你们一块儿改也是比较费时费力的,而不锁版本的好处就在于开发人员能够无感知的就能够在业务开发时修复一些隐藏的bug,而不用每次特意去修改某个包的版本号,所以推荐你们无需将package-lock.json归入版本管理。
不少公司或多或少都会有内网,搭建npm私服也是必经之路,开发人员若是对于npm没有基本的认识,通常遇到问题很难明白其中发生了什么,但愿本文给你们介绍的npm知识可以帮助你们之后更好的工做,若有不对之处,欢迎指正~