当你在初始化的项目里使用 modern build
命令的时候,Modern.js Module 会根据当前配置内容,生成相应的构建产物。
模板创建的默认配置内容如下:
默认生成产物具有以下特点:
ES6
,更高级的语法将会被转换。dist
目录,类型文件输出的目录为 dist/types
。看到这里你可能会有以下疑问:
buildPreset
是什么?接下来,我们首先来了解一下 buildPreset
。
buildPreset
代表着提前准备好的一组或者多组构建相关的配置,只需要使用 buildPreset
对应的预设值,就可以省去麻烦且复杂的配置工作,得到符合预期的产物。
Modern.js Module 主要内置了两套构建预设,包括:
npm-component
: 用于构建组件库。npm-library
: 用于打包其他库类型的项目,如工具库。同时,还提供一些变体,例如 npm-library-with-umd
和 npm-library-es5
,顾名思义,分别对应带有 umd 产物和支持到 es5 语法的库预设。
详细配置可以查看其 API 。
除此之外,我们也可以完全自定义构建配置:
buildConfig
是一个用来描述如何编译、生成构建产物的配置项。在最开始提到的关于“构建产物的特点”,其实都是 buildConfig
所支持的属性。目前所支持的属性覆盖了大部分模块类型项目在构建产物时的需求,buildConfig
不仅包含一些产物所具备的属性,也包含了构建产物所需要的一些特性功能。接下来从分类的角度简单罗列一下:
构建产物的基本属性包括:
buildConfig.buildType
。buildConfig.target
。buildConfig.format
。buildConfig.dts
。buildConfig.sourceMap
。buildConfig.input
。buildConfig.outDir
。buildConfig.sourceDir
。构建产物所需的常用功能包括:
buildConfig.alias
。buildConfig.asset
。buildConfig.copy
。buildConfig.define
。buildConfig.jsx
。一些高级属性或者使用频率不高的功能:
buildConfig.minify
。buildConfig.spitting
buildConfig.platform
。buildConfig.umdGlobals
。buildConfig.umdModuleName
。除了以上分类以外,关于这些 API 的常见问题和最佳实践可以通过下面的链接来了解:
bundle
和 bundleless
input
和 sourceDir
。了解 buildPreset
和 buildConfig
之后,我们可以将二者进行结合使用。
在实际项目中,我们可以先使用 buildPreset
来快速获取一套默认构建配置。如果需要自定义,可以使用 buildConfig
进行覆盖和扩展。
扩展的逻辑如下:
buildConfig
是数组时,会在原来的预设基础上添加新的配置项。这会在原本预设的基础上,额外生成一份 IIFE 格式、支持到 ES2020 语法的产物,输出目录为项目下的 dist/global
目录。
buildConfig
是对象时,会将对象中的配置项覆盖到预设中。这会使得每一项构建任务都会生成 sourceMap 文件。