最近遇到一个用户场景:

客户需要我们的前端源码来做二次开发,但前端源码中包含一些公司内部的私有 npm 仓库中的库,因此需要想办法让用户也能安装这些库。

当时直接想到的方法有两种:

  1. 将库的构建产物直接放到项目中,通过修改 path 别名的方式引用。
  2. 将库的构建产物直接放到项目中,用类似 npm link 的方式,通过修改 package.json 的引用 path 实现引用库。

理论上两种方法都是可用的,但是一点也不优雅,而且存在增大源码体积的问题,于是开始寻找能让客户也通过普通的 npm i 就能安装包的方法。

通过一番查(wen)找(ai),发现 npm 包是可以通过 url 引用的。众所周知,npm 仓库存放的一般都是 tgz 格式的压缩包,而 npm 自带命令 npm pack 可以将库打包为 tgz 文件。到这里思路就很明显了,下面直接上解决步骤:

  1. 从安装过私有包的项目进入包的根目录
    cd ./node_modules/ur-private-registry

  2. 执行 npm pack 打包文件,打包出的文件会生成在执行命令的目录下

  3. 将打包出的文件上传至 CDN 仓库,并在 package.json 文件中修改对应依赖的 url

    ...
    "ur-private-registry": "https://ur-cdn-url.com/ur-path/ur-private-registry.tgz"
    ...

这样即使无法访问公司的私有 npm 仓库,也能通过 CDN 安装到项目需要的私有包了。

当然,这种方法的缺点是只能安装固定版本的包,无法降级或更新。如果有更新版本的需求的话,就需要手动更新 url,或者干脆开一个公用 npm 仓库了。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注