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

时间:2019-08-22 19:43:42

标签: nestjs nrwl-nx

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

是否有一种在构建时生成package.json的方式,该方式仅包含我正在构建的应用程序所需的软件包?

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

我还尝试构建一个包含所有应用程序的js文件,但它似乎无法正常运行,并且始终需要tslib。

2 个答案:

答案 0 :(得分:3)

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

generatePackageJson 中将 true 设置为 workspace.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 <----------------------
          },
....

答案 1 :(得分: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/caching/

但是,这会带来一系列问题(例如,并行作业中一个或多个正在更改依赖项)。

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