“npm pack” + CDN 解决私有包安装问题
最近遇到一个用户场景:
客户需要我们的前端源码来做二次开发,但前端源码中包含一些公司内部的私有 npm 仓库中的库,因此需要想办法让用户也能安装这些库。
当时直接想到的方法有两种:
- 将库的构建产物直接放到项目中,通过修改 path 别名的方式引用。
- 将库的构建产物直接放到项目中,用类似
npm link的方式,通过修改package.json的引用 path 实现引用库。
理论上两种方法都是可用的,但是一点也不优雅,而且存在增大源码体积的问题,于是开始寻找能让客户也通过普通的 npm i 就能安装包的方法。
通过一番查(wen)找(ai),发现 npm 包是可以通过 url 引用的。众所周知,npm 仓库存放的一般都是 tgz 格式的压缩包,而 npm 自带命令 npm pack 可以将库打包为 tgz 文件。到这里思路就很明显了,下面直接上解决步骤:
-
从安装过私有包的项目进入包的根目录
cd ./node_modules/ur-private-registry -
执行
npm pack打包文件,打包出的文件会生成在执行命令的目录下 -
将打包出的文件上传至 CDN 仓库,并在
package.json文件中修改对应依赖的 url... "ur-private-registry": "https://ur-cdn-url.com/ur-path/ur-private-registry.tgz" ...
这样即使无法访问公司的私有 npm 仓库,也能通过 CDN 安装到项目需要的私有包了。
当然,这种方法的缺点是只能安装固定版本的包,无法降级或更新。如果有更新版本的需求的话,就需要手动更新 url,或者干脆开一个公用 npm 仓库了。