目前工作是在做基础数据的SDK。SDK做为全公司学习数据的基础功能,抽离成公共依赖,发布到公司的npm的私库。

最近更新版本,发现业务加载不到依赖。

破案流程回顾:

先来,tl’dr;

npm publish的时候会读 .npmignore,如果不存在就去读 .gitignore。最后创建了一个空的.npmignore,问题解决。(坑!)

入口

查 package.json 指定的入口

1
2
3
4
5
{
  ...
  "main": "./dist/index.js",
  ...
}

发现业务依赖加载是需要拿到 dist内的index做为入口。

业务依赖是否存在

发现了,确实不存在dist文件夹.

npm

打包问题吗?

在本地和CI的打包是存在 dist 的。那是为什么呢?

本地

ci

关键点

发现ci上的log有些异常, 执行publish后,并没有推dist到npm私库上。

破案

解决与本质:

在stackoverflow上找到来对应的答案,这里 以及npm官方的 这里

在发布npm包的时候,publish的内容大概会经过这几个步骤:

  1. 查找package.json里的 files 字段,比如 "files": ["dist/*.js", "dist/**/&.js] ,就会发布dist的js文件。

  2. 如果没有package.jsonfiles 字段,就根据 .npmignore,排除掉不需要publish的文件,如果这个文件内容是空的,就是不排除特定文件。

  3. 如果没有 .npmignore,但是有.gitignore,就会根据 .gitignore排除掉不需要publish的文件。

刚好我这里就踩坑了,当初.gitignore加上dist,这样可以避免dist被提交到git,但是即没有在package.json指定文件也没有加上.npmignore

最后创建了一个空的.npmignore,问题解决。

-EOF-