我有一个使用nx和多个node / nestjs应用程序的monorepo。有些应用程序不需要其他应用程序中使用的所有软件包。因为这是一个monorepo,所以我需要在部署期间为每个应用程序安装所有软件包。
是否有一种在构建时生成package.json的方式,该方式仅包含我正在构建的应用程序所需的软件包?
我尝试使用“ generate-package-json-webpack-plugin”生成package.json,但它只能检测到一半的依赖项。
我还尝试构建一个包含所有应用程序的js文件,但它似乎无法正常运行,并且始终需要tslib。
答案 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