如何使用 Nx 运行单个打字稿文件

Jef*_*eff 7 nrwl-nx

我有一个 Nx Node 项目,它使用预处理的摘要统计文件。这些统计文件需要大量处理,并且很少需要生成。然而,一旦生成,主节点应用程序就会快速运行。

我想要一个可以手动运行的预处理步骤来生成这些统计资源。我想使用 Nx 的 typescript、prettier 和 linting 支持来编写代码来生成这些统计文件。但是为每个处理步骤创建一个完整的 Node Nx 库似乎是很多不必要的基础设施。

有一个选项可以运行自定义命令:https ://nx.dev/latest/node/executors/run-commands-builder 。我想使用 Typescript 文件来执行此操作,但文档仅显示 shell 命令或组合预先存在的 Nx 命令。AFAICT 我不能只将其指向打字稿文件。

问题是:

  1. 我可以运行自定义命令来触发单个打字稿文件吗?
  2. 为生成这些统计信息的每个文件创建一个完整的 Node 库是否更惯用?

谢谢

ale*_*oli 11

我遇到过与您类似的用例:我有一个 NX 应用程序,需要某种脚本才能运行(并非总是如此,因此我无法将它们放入应用程序中的某些实用程序中)。这些脚本不需要转换为 js,但我想使用我的 nx monorepo 中的所有 utils 和 lib。

我的解决方案是在我的应用程序中创建一个脚本文件夹并将其从构建过程中排除,然后在workspace.json(或project.json)上我添加了这个目标:

nx 15 及更低(请参见此处

{
  "run-script": {
    "executor": "@nrwl/workspace:run-commands",
    "configurations": {
      "my-script": {
        "commands": [
          "ts-node apps/path/to/my/script.ts"
        ]
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

nx 16 及以上

{
  "run-script": {
    "executor": "@nx/workspace:run-commands",
    "configurations": {
      "my-script": {
        "commands": [
          "ts-node apps/path/to/my/script.ts"
        ]
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以使用以下命令运行它:

nx run my-project:run-script:my-script

  • 现在应该是“nx:run-commands”而不是“@nrwl/workspace:run-commands” (2认同)

小智 6

如果您有脚本使用的专用 tsconfig 文件和依赖库,则执行脚本的编译版本可以避免很多麻烦。执行以下操作:

nx g @nrwl/workspace:run-commands run-script --project my-project --command 'node dist/apps/my-project/main.js'
Run Code Online (Sandbox Code Playgroud)

创建一个使用脚本的 javascript 编译的命令,绕过所有打字稿配置。它在 apps/my-project/project.json 中生成以下内容

    "run-script": {
      "executor": "@nrwl/workspace:run-commands",
      "outputs": [],
      "options": {
        "command": "node dist/apps/my-project/main.js"
      }
    }
Run Code Online (Sandbox Code Playgroud)

然后可以通过以下方式执行:

nx run my-project:run-script
Run Code Online (Sandbox Code Playgroud)

感谢 alessiopremoli 和 Dharman 为我指明了正确的方向。


Shy*_*gam 4

您不必为每个创建单独的库。如果它们都属于“生成我的预处理统计数据”的类别,那么它们可以(也许应该)放在一起。

至于触发单个 TypeScript 文件,TypeScript 文件并不意味着被触发。相反,我们将它们编译成 JS 并使用 Node.js 运行 JS 文件。一般来说,这会转化为以下命令:

  1. 运行tsc以编译您的 TypeScript 文件。
  2. 运行node <your-main-file>.js以执行您的 JS 文件。

汇编

命令 描述
tsc index.ts index.ts编译当前目录中命名的单个文件。
tsc *.ts 编译当前目录中的所有 TypeScript 文件。
tsc --project tsconfig.stats-type1.json
tsc --project tsconfig.stats-type2.json
...
根据当前目录中指定的配置文件进行编译。

最后一个示例展示了如何tsconfig.json在库中拥有多个文件,每个文件对应一种统计类型,以便根据您的需要创建不同的编译变体。

有关详细信息,请参阅tsc CLI 选项。

执行

之后,根据您指定tsc将文件输出到的位置,将创建的文件传递到node.

如果您想在一个命令中运行多个文件,有几种方法可以做到这一点。一种方法是创建一个主文件,从所有其他文件导入和调用函数。

祝你好运。