首页
/ Modern.js 生成器插件 Context API 深度解析

Modern.js 生成器插件 Context API 深度解析

2025-07-08 06:23:09作者:廉皓灿Ida

前言

Modern.js 是一个现代化的前端开发框架,提供了强大的生成器(Generator)功能,帮助开发者快速搭建项目结构。生成器插件的核心在于其 Context API,它为插件提供了丰富的操作能力和生命周期钩子。本文将深入解析 Modern.js 生成器插件中的 Context API,帮助开发者更好地理解和利用这一强大工具。

Context 概述

在 Modern.js 生成器插件中,context 是插件与生成器系统交互的核心接口。它提供了三大类功能:

  1. 获取生成器执行环境信息
  2. 操作用户输入
  3. 管理插件生命周期

环境信息获取 API

语言环境获取

locale 属性可以获取当前生成器执行环境的语言设置,支持 zh(中文)和 en(英文)两种值。插件可以根据不同语言返回不同的提示信息或配置。

文件系统检查

isFileExist 方法用于检查目标项目中是否存在指定文件。这是一个异步方法,返回 Promise。在插件开发中,我们经常需要根据目标项目的文件结构决定后续操作。

// 示例:检查 package.json 是否存在
const hasPackageJson = await context.isFileExist('package.json');
if (hasPackageJson) {
  // 执行相关逻辑
}

目录读取

readDir 方法可以读取目标项目指定目录下的文件列表,返回一个包含文件名的数组。这对于需要分析项目结构的插件非常有用。

// 示例:读取 src 目录下的文件
const srcFiles = await context.readDir('src');
srcFiles.forEach(file => {
  // 处理每个文件
});

输入操作 API

Modern.js 生成器通过交互式问答收集用户输入,插件可以通过 Context API 对这些输入进行定制。

添加输入问题

addInputBeforeaddInputAfter 允许插件在指定问题前后插入新的问题。这两个方法都接收两个参数:参考问题的 key 和新的问题配置。

// 在 packageManager 问题后添加编程语言选择问题
context.addInputAfter('packageManager', {
  type: 'object',
  properties: {
    language: {
      type: 'string',
      title: '请选择编程语言:',
      enum: [
        { label: 'TypeScript', value: 'ts' },
        { label: 'JavaScript(ES6+)', value: 'js' },
      ],
    },
  },
});

注意事项

  1. 新问题的 key 不能与 Modern.js 内置问题的 key 冲突
  2. addInputAfter 的优先级高于 addInputBefore
  3. 可以多次调用添加多个问题,顺序由调用顺序决定

修改输入属性

setInput 方法可以修改已有输入问题的属性,如标题、默认值等。

// 修改 packageName 问题的标题
context.setInput('packageName', 'title', "项目名称");

设置输入默认值

setInputValuesetDefaultConfig 都可以设置输入默认值,但行为不同:

  • setInputValue: 设置默认值,但问题仍会显示
  • setDefaultConfig: 设置默认值并跳过该问题的交互
// 设置包管理器默认值为 npm
context.setInputValue({
  packageManager: 'npm'
});

// 设置默认配置并跳过交互
context.setDefaultConfig({
  packageManager: 'npm'
});

Git 提交信息设置

setGitMessage 可以修改 Modern.js 默认的 Git 初始化提交信息。

context.setGitMessage('chore: 初始化项目');

生命周期函数

Modern.js 生成器插件提供了两个关键的生命周期函数:

  1. onForged: 在生成文件前执行,适合准备操作
  2. afterForged: 在生成文件后执行,适合安装依赖等后处理

这两个函数将在后续文章中详细讲解。

最佳实践

  1. 输入设计:合理设计问题顺序,将相关问题分组放置
  2. 错误处理:对文件操作添加适当的错误处理
  3. 国际化:根据 locale 返回不同语言的提示
  4. 性能优化:避免不必要的文件系统操作

结语

Modern.js 生成器插件的 Context API 提供了强大的项目生成控制能力。通过合理使用这些 API,开发者可以创建出功能丰富、用户体验良好的项目生成器插件。理解这些 API 的工作原理和使用场景,是开发高质量 Modern.js 插件的基础。