明道若昧进道若退

发布于
于私有注册表发布 npm 包

明道若昧,进道若退,夷道若纇。 上德若谷;大白若辱;广德若不足;建德若偷;质真若渝。


最近想把博客用到的图标单独打包成 npm 包,但是有一些图标涉及到品牌规范,并且不太想占用公共资源,于是想着不发布到 npm 官方注册表。

之前在 使用 github Action 发布 npm 包 的时候,有在 github 上面发布 npm 包,但是一来 npm 也是公开的,二来没有深入研究,故而也不太适合。

在自托管的 gitlab 上实际上也可以发布 Package,但当时应该是没有仔细看文档,因懒惰而劝退。这次在自托管的 forgejo 点进去,发现 发布 npm 包 还挺简单的。

Screenshot

指定不同的 registries

因为是私有注册表,不是公开注册表的镜像,所以如果指定安装的时候用私有的话,package.json 里边其他的包也会去查找私有注册表,直接 404。

npm 无法为 非 scope 包 指定不同 registries,推荐的解决方案是 将范围 scope 与注册表相关联

虽然看起来不是那么优雅,但也算能解决问题。

在项目的 .npmrc 文件中设置此注册中心

registry=https://registry.npmjs.org
@myReg:registry=https://fo.my.reg/api/packages/pub/npm/

默认模块会从官方下载,@myReg 范围的包则从自己的注册表下载。

npm 安装远程 URL

正好最近有个项目报错,于是发现,其实 npm 的 package.json 里是可以 从远程安装 的。

npm install <git remote url>

但是设计的时候指针对 git 来源,支持 git+ssh, git+https 协议,以及 github gist bitbucket gitlab 等别名。似乎是通过 git 将目标的仓库克隆下来并安装。

因为已经打包成了 npm 包,暂时没有尝试这种方式。

其他的 publish 相关

因为我需要打包静态资源,一开始打包后发现文件都不见了,这时候需要在 package.json 里边添加 file 区域,指定需要 publish 的文件。

"files": [
    "data/**/*",
    "*.js",
    "*.d.ts"
],

typescript 相关的 d.ts 需要在 exports 里边指定:

"exports": {
  ".": {
    "import": "./index.js",
    "require": "./index.js"
  },
  "./content": {
    "import": {
      "types": "./content.d.ts",
      "default": "./content.js"
    },
    "require": {
      "types": "./content.d.ts",
      "default": "./content.js"
    }
  },
}

然后可以用 npm pack 预览一下打包后的压缩包。

确认无误就可以 npm publish 了。


最后,就可以打造相对可控的开发环境了。

没有监控,没有追踪,没有大公司利益。才足够安心。