Modern.js 支持通过生成器插件的方式对提供的工程方案进行定制化或针对工程方案进行特定场景的定制化。
生成器插件是一个模块,可以直接使用 Modern.js 的模块工程方案开发。当然,Modern.js 也提供了对应的生成器插件(@modern-js/generator-plugin-plugin
)直接新建生成器插件项目。
一个生成器插件项目目录如下:
.
├── README.md
├── package.json
├── src
│ ├── index.ts
│ └── modern-app-env.d.ts
├── templates
└── tsconfig.json
src/index.ts
中为源码目录,用于开发生成器插件逻辑。插件默认导出一个函数,函数参数为 context
,context
上提供一些方法可直接对当前项目进行操作,本章节后续将详细介绍这些方法。
templates
目录为模板目录,用于存在生成器插件中需要使用的模板文件。
生成器插件分为两种:
扩展工程方案:直接对默认提供的三大工程方案进行定制化
创建工程方案场景:基于默认的三大工程方案创建对应的工程方案场景
生成器插件的分类通过 package.json
中的 meta
信息提供。
{
"meta": {
"extend": "mwa"
}
}
extend
为扩展的工程方案名称,Modern.js 的工程方案名称分别为 mwa
、module
、 monorepo
。
{
"meta": {
"key": "new_solution",
"name": "新工程方案",
"type": "mwa"
}
}
key
为场景方案名称,值为字符串。
name
为场景方案展示名称,用与使用时选项的展示,值为字符串。
type
为工程方案类型,除了和 extend
一样支持三种工程方案之外,还支持自定义(custom)类型。
自定义类型提供了完全自定义工程方案的实现能力,当使用该类型新建工程方案场景时,只提供了少量的开发层面的最佳实践的代码,比如 .gitignore
、.editorConfig
等文件,具体为下方目录结构:
.
├── .editorconfig
├── .gitignore
├── .idea
│ ├── codeStyles
│ │ ├── Project.xml
│ │ └── codeStyleConfig.xml
│ ├── inspectionProfiles
│ │ └── Project_Default.xml
│ └── jsLinters
│ └── eslint.xml
├── .nvmrc
└── .vscode
├── extensions.json
└── settings.json
自定义类型保证了可根据自身对工程方案的需求灵活进行配置。