在 nx 构建/部署上生成 package.json

N0C*_*oud 4 nestjs nrwl-nx

我有一个使用 nx 和多个 node/nestjs 应用程序的 monorepo。某些应用程序不需要其他应用程序中使用的所有包。因为它是一个 monorepo,所以我需要在部署期间为每个应用程序安装所有包。

有没有办法在构建时生成一个 package.json ,它只包含我正在构建的应用程序所需的包?

我尝试使用“generate-package-json-webpack-plugin”来生成 package.json,但它只检测到一半的依赖项。

我还尝试构建一个包含所有应用程序的 js 文件,但它似乎不起作用并且总是需要 tslib。

Shl*_*evi 5

在查看 nx 源代码后,我找到了答案。

设置generatePackageJsontrueworkspace.json那里<project-name>/targets/build/options

这将为您生成 package.json,其中包含您的应用程序所需的依赖项。

这里的例子:

"node-api": {
      "root": "apps/node-api",
      "sourceRoot": "apps/node-api/src",
      "projectType": "application",
      "prefix": "node-api",
      "targets": {
        "build": {
          "executor": "@nrwl/node:build",
          "outputs": ["{options.outputPath}"],
          "options": {
            "showCircularDependencies": false,
            "outputPath": "dist/apps/node-api",
            "main": "apps/node-api/src/main.ts",
            "tsConfig": "apps/node-api/tsconfig.app.json",
            "assets": ["apps/node-api/src/assets"],
            "generatePackageJson": true <----------------------
          },
....
Run Code Online (Sandbox Code Playgroud)

  • 它在最新版本上如何工作?似乎在架构中找不到“generatePackageJson”,这就是我得到的。 (2认同)

mja*_*sie 4

根据Shlomi 的答案-workspace.json 现在已弃用generatePackageJson选项已移至@nx/webpack:webpack 包,因此现代(截至 2023 年)使其工作的方法是:

  1. 在中定义默认值nx.json
{
  "targetDefaults": {
    "build": {
      "executor": "@nx/webpack:webpack",
      "options": {
        "generatePackageJson": true
      },
      // ...
    },
    // ...
  },
  // ...
}
Run Code Online (Sandbox Code Playgroud)
  1. 在中定义特定于项目的设置project.json
{
  "targets": {
    "build": {
      "executor": "@nx/webpack:webpack",
      "options": {
        "generatePackageJson": true
      },
      //...
    },
    // ...
  }
  // ...
}
Run Code Online (Sandbox Code Playgroud)
  1. 在中定义特定于项目的设置package.json
{
  "name": "...",
  "scripts": {
    // ...
  },
  "nx": {
    "targets": {
      "build": {
        "executor": "@nx/webpack:webpack",
        "options": {
          "generatePackageJson": true
        },
      },
      // ...
    },
    // ...
  },
  // ...
}
Run Code Online (Sandbox Code Playgroud)