You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenUI5多组件应用构建问题:依赖组件未纳入输出目录

问题

我有一个OpenUI5项目结构如下:

my-app/
├─ node_modules/
├─ RootComponent/
│  ├─ package.json
│  ├─ ui5.yaml
│  ├─ webapp/
│  |  ├─ manifest.json
│  |  ├─ Component.js
├─ UserComponent/
│  ├─ package.json
│  ├─ ui5.yaml
│  ├─ webapp/
│  |  ├─ manifest.json
│  |  ├─ Component.js
├─ AdminComponent/
│  ├─ package.json
│  ├─ ui5.yaml
│  ├─ webapp/
│  |  ├─ manifest.json
│  |  ├─ Component.js
├─ package.json
├─ README.md

执行npm install后,用UI5 CLI构建RootComponent时,UserComponent和AdminComponent未被纳入输出,控制台报错:

**** error: missing module my/app/user/Component.js

参考官方示例执行ui5 build --all可将依赖组件打包到resources文件夹,但自己的项目执行相同命令后,resources仅包含sap.*包,导致运行RootComponent时出现404错误。

以下是关键配置片段:

RootComponent/package.json

{
    "name": "my-app-root",
    "version": "1.0.0",
    "scripts": {
        "build": "ui5 build self-contained --all --dest=../../webapp --clean-dest",
        // ...
    },
    "dependencies": {
        "my-app-user": "file:../UserComponent",
        "my-app-admin": "file:../AdminComponent"
    },
    "devDependencies": {
        // ...
    }
}

RootComponent/ui5.yaml

specVersion: "3.0"
metadata:
  name: my.app.root
type: application
builder:
  customTasks:
  - name: ui5-tooling-modules-task
    afterTask: replaceVersion
server:
  customMiddleware:
    - name: ui5-middleware-livereload
      afterMiddleware: compression
framework:
  name: OpenUI5
  version: "1.118.0"

RootComponent/webapp/manifest.json

{
    "_version": "1.12.0",
    "sap.app": {
        "id": "my.app.root",
        "type": "application",
        "i18n": "i18n/i18n.properties",
        "title": "{{appTitle}}",
        "description": "{{appDescription}}",
        "applicationVersion": {
            "version": "1.0.0"
        }
    },
    "sap.ui": {
        // ...
    },
    "sap.ui5": {
        "rootView": {
            // ...
        },
        "componentUsages": {
            "UserComponent": {
                "name": "my.app.user",
                "settings": {},
                "componentData": {},
                "lazy": true
            },
            "AdminComponent": {
                "name": "my.user.admin",
                "settings": {},
                "componentData": {},
                "lazy": true
            }
        },
        "dependencies": {
            "minUI5Version": "1.118.0",
            "libs": {
                "sap.ui.core": {},
                "sap.m": {}
            },
            "components": {
                "my.app.user": {},
                "my.app.admin": {}
            }
        },
        "models": {
            "i18n": {
                // ...
            }
        },
        "routing": {
            "config": {
                // ...
            },
            "routes": [
                // ...
            ],
            "targets": {
                "user": {
                    "type": "Component",
                    "usage": "UserComponent"
                },
                "admin": {
                    "type": "Component",
                    "usage": "AdminComponent"
                }
            }
        }
    }
}

UserComponent/package.json

{
    "name": "pars-web-user",
    "version": "1.0.0",
    "scripts": {
        "build": "ui5 build --clean-dest --all"
        // ...
    },
    "dependencies": {
        // ...
    },
    "devDependencies": {
        // ...
    }
}

UserComponent/webapp/manifest.json

{
    "_version": "1.12.0",
    "sap.app": {
        "id": "my.app.user",
        "type": "application",
        "i18n": "i18n/i18n.properties",
        "title": "{{appTitle}}",
        "description": "{{appDescription}}",
        "applicationVersion": {
            "version": "1.0.0"
        }
    },
    // ...
}
解决方案

你需要修正以下几处配置,确保UI5 Tooling能识别并打包依赖组件:

1. 对齐子组件package.json的名称与依赖

RootComponent依赖的是my-app-user和my-app-admin,但UserComponent的package.json里name是pars-web-user,完全不匹配。修改UserComponent和AdminComponent的package.json:

UserComponent/package.json

{
    "name": "my-app-user",
    "version": "1.0.0",
    "scripts": {
        "build": "ui5 build --clean-dest --all"
        // ...
    },
    "ui5": {
        "type": "application",
        "metadata": {
            "name": "my.app.user"
        }
    },
    "dependencies": {
        // ...
    },
    "devDependencies": {
        // ...
    }
}

AdminComponent/package.json

同理,把name改为my-app-admin,并添加相同的ui5配置块,metadata.name设为my.app.admin。

2. 修正RootComponent中AdminComponent的名称拼写错误

在RootComponent的manifest.json里,componentUsages.AdminComponent.name写成了my.user.admin,与实际AdminComponent的sap.app.id不符,修正为:

"AdminComponent": {
    "name": "my.app.admin",
    "settings": {},
    "componentData": {},
    "lazy": true
}

3. 确保子组件的ui5.yaml配置正确

每个子组件的ui5.yaml需要明确版本和组件标识,比如UserComponent/ui5.yaml:

specVersion: "3.0"
metadata:
  name: my.app.user
type: application
framework:
  name: OpenUI5
  version: "1.118.0"

AdminComponent的ui5.yaml做同样配置,metadata.name设为my.app.admin。

4. 重新安装依赖并构建

  • 回到RootComponent目录,执行npm install重新关联正确的依赖
  • 执行构建命令:ui5 build self-contained --all --dest=../../webapp --clean-dest

完成以上修改后,UI5 Tooling会正确识别子组件为UI5模块,并将它们打包到输出目录的resources文件夹中,解决404和模块缺失的问题。

内容的提问来源于stack exchange,提问作者BenjyTec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 02:37:08