如何开发可生成单文件并输出到dist目录的NX插件
核心疑问解答
1. generator和executor的区别
- Generator:仅用于操作工作区的源码、配置文件,比如新增组件、修改NX配置、初始化项目结构,仅在执行
nx generate相关命令时运行,不参与构建流程,也不应该操作dist等构建产物目录。 - Executor:用于执行各类流程任务,比如构建、lint、打包,以及你需要的生成构建产物附加文件的操作,在执行
nx run对应目标时运行,完全适配你的需求。
你的生成dist目录文件的逻辑确实应该放到executor中,不需要使用generator。
2. 退出逻辑的处理
你原有脚本中的process.exit相关逻辑不需要手动实现,NX会自动根据executor返回的success字段设置退出码:返回success: true时退出码为0,返回success: false时退出码为1,和你原有脚本逻辑完全一致。
完整代码示例
executor.ts
import * as fs from 'fs' import { promisify } from 'util' import { join } from 'path' import { BuildExecutorSchema } from './schema' const writeFile = promisify(fs.writeFile) function generateContent() { return { foo: 'bar' } } async function generateFile(filePath: string, content: unknown) { try { await writeFile(filePath, JSON.stringify(content, null, 2) + '\r\n') } catch (error) { throw new Error('Could not write file: ' + filePath) } } export default async function runExecutor(options: BuildExecutorSchema) { try { // 建议将输出路径配置到schema中,避免写死,适配不同项目使用 const outputPath = options.outputPath || 'dist/apps/my-app' const targetFilePath = join(outputPath, 'file.json') const content = generateContent() await generateFile(targetFilePath, content) return { success: true } } catch (err) { console.error(err) return { success: false } } }
可选:schema.json配置示例
可以在schema中新增可配置参数,避免路径写死:
{ "$schema": "http://json-schema.org/schema", "type": "object", "properties": { "outputPath": { "type": "string", "description": "生成文件的输出目录", "default": "dist/apps/my-app" } }, "required": [] }
额外使用建议
如果需要该生成操作在项目构建完成后自动执行,可以在对应项目的project.json中,给该executor对应的目标配置dependsOn: ["build"],这样每次执行构建时会自动在构建结束后运行该生成文件的逻辑。
内容的提问来源于stack exchange,提问作者user3142695
相关产品推荐
相关产品推荐

