9

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

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

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

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

4

2 回答 2

16

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

设置在where 。generatePackageJson_trueworkspace.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 <----------------------
          },
....
于 2021-02-27T09:10:37.520 回答
1

Nx 鼓励单一版本的政策,并且只有一个 package.json。

如果问题是您每次在构建之前都在 CI 中安装所有依赖项,那么您可能需要依赖 CI 系统提供的功能来在运行之间缓存这些依赖项 - 许多现有的 CI 系统确实提供了这些:* Gitlab:https://docs.gitlab.com/ee/ci/caching/ * CircleCI:https ://circleci.com/docs/2.0/caching/ * Travis:https ://docs.travis-ci.com/user/缓存/

然而,这有其自身的一系列问题(例如,一个或多个正在改变依赖关系的并行作业)。

我们可以尝试在 Nx 中使用一个命令:类似于“affected:dep-install”,它将检测哪些软件包作为受影响命令的一部分安装。请在此处为其创建一个问题:https ://github.com/nrwl/nx/issues

于 2019-08-27T16:23:34.997 回答