You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何开发可生成单文件并输出到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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:18:02