Native ESM 之后,pakcage.json#exports 现在越来越重要,每个包都有 exports,这就意味着需要大量和 package.json 同级的 .js 产物,这就衍生出了一种面向未来的打包模式:打包后把 package.json copy 到 dist 再发包,也就是 dist 是一个包的结构,而不是从当前 root 发包,是一个大趋势。

可以参考 zustand(https://github.com/pmndrs/zustand)

Untitled

所以 copy package.json 的时候,我们要去除那些没用的字段,clean-pkg-json (https://github.com/privatenumber/clean-pkg-json)就由此而生。

为什么要将 .js 产物放到和 package.json 同级?

这是因为现在 IDE 还不支持识别 exports 里面的导出类型,是一种降级策略;

比如 import a from 'zustand/subpath' ,则必须要有 subpath.js 这个产物在包的根目录,但是这样的出口多了,就会把项目的原始根目录搞乱,所以大家就想了一种方法,发包的时候在 dist 里发包(安全策略:指定项目根目录 private: true ,写到 dist 时再改成 false )。