package.json的main,module,浏览器属性应该指向min还是source?

时间:2018-10-05 14:16:06

标签: javascript node.js npm webpack rollup

对于以类似...的结构发布的JS库

my-package\
  dist\
    my-package.cjs.js
    my-package.cjs.min.js
    my-package.cjs.min.js.map
    my-package.esm.js
    my-package.esm.min.js
    my-package.esm.min.js.map
    my-package.umd.js
    my-package.umd.min.js
    my-package.umd.min.js.map
  package.json

例如为CJS,ESM和UMD捆绑包构建,每个捆绑包都有一个“源”,缩小的地图文件。

package.json

{ // ...
  "main": "dist/my-package.cjs.js",
  "module": "dist/my-package.esm.js",
  "browser": "dist/my-package.umd.js"
}

我的假设是这些属性应指向“源”文件,并且如果构建是非调试/非构建版本,则用于将我的库(例如Webpack)捆绑到外部项目中的工具足够聪明,可以选择缩小的文件-dev模式。

或者,我错了,这些属性应该指向缩小的文件吗?

1 个答案:

答案 0 :(得分:0)

我认为你是对的。如果只发布例如ESM和UMD,则可以坚持使用

{ // ...
  "main": "dist/my-package.umd.js",
  "module": "dist/my-package.esm.js"
}

最重要的是,使用“ 模块”,您可以提供捆绑软件的版本,该版本可以被通过Webpack或Rollup编译的应用有效使用。在这种情况下,可以应用树状摇动,因此最终组合中不会包含所有无效代码。

例如,这对于React组件库很有用。您可以通过这种方式导出它,以便使用它的应用仅获取正在使用的组件的代码。

在此之前已经回答过:

What is the "module" package.json field for?