簡體   English   中英

如何使用 Nx 運行單個 typescript 文件

[英]How to run a single typescript file with Nx

我有一個使用預處理摘要統計文件的 Nx Node 項目。 這些統計文件需要大量處理,很少需要生成。 但是,一旦生成它們,主節點應用程序就會快速運行。

我想要一個可以手動運行的預處理步驟來生成這些統計資產。 我想使用 Nx 的 typescript,更漂亮和 linting 支持來編寫代碼來生成這些統計文件。 但是為每個處理步驟創建一個完整的 Node Nx 庫似乎是很多不必要的基礎設施。

有一個運行自定義命令的選項: https://nx.dev/latest/node/executors/run-commands-builder 我想使用 Typescript 文件執行此操作,但文檔僅顯示 shell 命令或組合預先存在的 Nx 命令。 AFAICT 我不能只將其指向 typescript 文件。

問題是:

  1. 我可以運行自定義命令來觸發單個 typescript 文件嗎?
  2. 為每個生成這些統計信息的文件創建一個完整的 Node 庫是否更習慣?

謝謝

您不必為每個創建單獨的庫。 如果它們都屬於“生成我的預處理統計信息”的類別,那么它們可以(也許應該)go 一起。

至於觸發單個 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到 output 文件的位置,將創建的文件傳遞給node

如果您想在一個命令中運行多個文件,有幾種方法可以做到這一點。 一種是創建一個主文件,該文件從所有其他文件中導入和調用函數。

祝你好運。

我遇到了與您類似的用例:我有一個 NX 應用程序,它需要某種腳本才能運行(並非總是如此,所以我不能將它們放在應用程序的某個實用程序中)。 這些腳本不需要轉譯為 js,但我想使用我的 nx monorepo 中的所有 utils 和 libs。

我的解決方案是在我的應用程序中創建一個腳本文件夾並將其從構建過程中排除,然后在 workspace.json(或 project.json)上我添加了這個目標:

{
  "run-script": {
    "executor": "@nrwl/workspace:run-commands",
    "configurations": {
      "my-script": {
        "commands": [
          "ts-node apps/path/to/my/script.ts"
        ]
      }
    }
  }
}

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

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

如果您有專門的 tsconfig 文件和腳本使用的依賴庫,則執行腳本的編譯版本可以避免很多麻煩。 執行以下操作:

nx g @nrwl/workspace:run-commands run-script --project my-project --command 'node dist/apps/my-project/main.js'

創建一個使用腳本的 javascript 編譯繞過所有 typescript 配置的命令。 它在 apps/my-project/project.json 中產生以下內容

    "run-script": {
      "executor": "@nrwl/workspace:run-commands",
      "outputs": [],
      "options": {
        "command": "node dist/apps/my-project/main.js"
      }
    }

然后可以通過以下方式執行:

nx run my-project:run-script

感謝 alessiopremoli 和 Dharman 為我指明了正確的方向。

六個月后,我回到了這個問題,我的舊答案和同時添加的另一個答案都不適用於我的(新)案例:我必須運行一個腳本,其中包含來自 nx monorepo 的特定導入。 在挖掘更新后,我想出了一個新的解決方案。

主要思想是將您的 app / lib 相關腳本存儲在與它們相關的項目文件夾的子文件夾中,然后添加到workspace.jsonproject.json此文件夾的特定構建命令,例如:

{
    "_build_scripts": {
        "executor": "@nrwl/node:build",
        "outputs": [
            "{options.outputPath}"
        ],
        "options": {
            "outputPath": "dist/libs/my-project-path",
            "tsConfig": "libs/my-project-path/tsconfig.lib.json",
            "packageJson": "libs/my-project-path/package.json",
            "main": "libs/my-project-path/scripts/myscript.ts",
            "assets": ["if needed"]
        }
    }
}

然后你可以設置你的運行腳本命令,總是在workspace.jsonproject.json中:

{
  "run-script": {
    "executor": "@nrwl/workspace:run-commands",
    "configurations": {
      "my-script": {
        "commands": [
          "./node_modules/.bin/nx run my-project:_build_script",
          "node dist/my-project-path/main.js"
        ],
        "parallel": false
      }
    }
  }
}

要記住兩件事: parallel設置為 false 是強制性的,您需要在執行腳本之前執行構建步驟; 就我而言,在node main.js之前,我必須在目錄中 cd,因為fs正在讀取一些解析與 monorepo 根目錄不兼容的路徑的文件。

最后你可以運行:

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

我有類似的情況,我想運行一次nx 節點應用程序來執行任務,結果是 output。 我將此附加到我的應用程序的目標中:

// project.json

{
  "$schema": "../../node_modules/nx/schemas/project-schema.json",
  "sourceRoot": "apps/app-name/src",
  "projectType": "application",
  "targets": {
    ...
    "run": {
      "executor": "@nrwl/workspace:run-commands",
      "options": {
        "commands": [
          "nx run app-name:build:production",
          "node dist/apps/app-name/main.js"
        ]
      }
    }
  },
  "tags": []
}

然后運行應用程序一次: nx run app-name:run

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM