在讲正题之前,先说一下maven关于依赖下载相关的特性和配置。
maven从私服下载依赖,可以直接在当前项目的pom.xml文件中,添加私服仓库配置,例如:
<repositories>
<repository>
<id>maven-jtv-group</id>
<url>http://localhost:9999/repository/xx-hosted</url>
</repository>
</repositories>
这样,当前项目在现在依赖的时候,会先去私服中去找,发现没有该坐标,会自动去中央仓库http://repo1.maven.org/maven2中去找,此时我们可以再maven的config.xml中去配置中央仓库的镜像,以加快依赖下载速度。
这种使用方式很好,可以从多个源去加载依赖。
npm下载依赖,一般只能从一个registry下载。此时,如果有私有包不想发布到外网仓库,那就得借助私服。
比如nexus私服,配置完私有npm hosted后,还要配置npm proxy代理,最后使用npm group将npm hosted和npm proxy合并到一起。公网依赖包能否下载成功就完全取决于nexus服务器外网能力,且普通开发员无法调整。
如果npm下载依赖也能像maven一样,那应该会体验更好。
npm官方文档中有关于给包添加域的介绍:scope | npm Docs (npmjs.com)
可以通过给包添加域前缀,然后再指定域的registry,就可以做到分源下载。
此种方式,私服无需配置代理,无需缓存公网包,能减少私服磁盘空间。同时开发员可以自行决定本机registry配置,选择合适的仓库,提升包下载速度。
具体整改如下:
1. 给私有包添加域,即给package.json中的包名name添加域前缀,如下:
{
"name": "@xx/demo",
"version": "0.0.1",
"description": "Demo",
"license": "UNLICENSED",
......
}
其中@xx 即为域(scope)前缀
修改完成后,将该包发布到私服,具体步骤略过
2. 本地项目整改
项目根目录添加.npmrc文件,文件内容如下:
@xx:registry=http://127.0.0.1:9999/repository/hosted/
关于.npmrc文件的作用及优先级关系,请各位读者自行参考资料理解。
该文件的作用是设置@xx域下的包的下载路径,待安装依赖时,以@xx/开头的包,都将从该地址下载。
其他的,还是走本机的registry
当然,本地项目里对于@xx/demo包的引用导入,也需要修改。
import demo from '@xx/demo'
import {x1,x2,...} from '@xx/demo'
以上做完后,万事大吉,尽情地享受吧