我有一个使用 nx 和多个 node/nestjs 应用程序的 monorepo。某些应用程序不需要其他应用程序中使用的所有包。因为它是一个 monorepo,所以我需要在部署期间为每个应用程序安装所有包。
有没有办法在构建时生成一个 package.json ,它只包含我正在构建的应用程序所需的包?
我尝试使用“generate-package-json-webpack-plugin”来生成 package.json,但它只检测到一半的依赖项。
我还尝试构建一个包含所有应用程序的 js 文件,但它似乎不起作用并且总是需要 tslib。
在查看 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 <----------------------
},
....
Run Code Online (Sandbox Code Playgroud)
根据Shlomi 的答案-workspace.json 现在已弃用,generatePackageJson选项已移至@nx/webpack:webpack 包,因此现代(截至 2023 年)使其工作的方法是:
nx.json:{
"targetDefaults": {
"build": {
"executor": "@nx/webpack:webpack",
"options": {
"generatePackageJson": true
},
// ...
},
// ...
},
// ...
}
Run Code Online (Sandbox Code Playgroud)
project.json:{
"targets": {
"build": {
"executor": "@nx/webpack:webpack",
"options": {
"generatePackageJson": true
},
//...
},
// ...
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
package.json:{
"name": "...",
"scripts": {
// ...
},
"nx": {
"targets": {
"build": {
"executor": "@nx/webpack:webpack",
"options": {
"generatePackageJson": true
},
},
// ...
},
// ...
},
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2693 次 |
| 最近记录: |