Ember Engines #

一、Engines概述 #

Ember Engines是一种将大型应用拆分为独立模块的机制,支持微前端架构。

1.1 Engines优势 #

优势 说明
模块化 独立开发和部署
代码隔离 减少耦合
按需加载 提高性能
团队协作 独立团队开发

1.2 Engines类型 #

  • Route-less Engines:无路由,仅提供组件和资源
  • Route-able Engines:有独立路由

二、创建Engine #

2.1 生成Engine #

bash
ember engine my-engine

2.2 Engine结构 #

text
my-engine/
├── addon/
│   ├── engine.js
│   ├── routes.js
│   └── index.js
├── app/
├── config/
├── lib/
├── tests/
└── package.json

2.3 Engine配置 #

javascript
// lib/my-engine/addon/engine.js
import Engine from '@ember/engine';
import loadInitializers from 'ember-load-initializers';
import Resolver from 'ember-resolver';

export default class MyEngine extends Engine {
  modulePrefix = 'my-engine';
  Resolver = Resolver;
}

loadInitializers(MyEngine, 'modulePrefix');
javascript
// lib/my-engine/addon/routes.js
import buildRoutes from 'ember-engines/routes';

export default buildRoutes(function () {
  this.route('dashboard');
  this.route('settings');
});

三、挂载Engine #

3.1 安装Engine #

bash
npm install --save my-engine

3.2 配置路由 #

javascript
// app/router.js
Router.map(function () {
  this.mount('my-engine', { path: '/engine' });
});

3.3 访问Engine #

text
/engine/dashboard
/engine/settings

四、Engine通信 #

4.1 共享服务 #

javascript
// lib/my-engine/addon/engine.js
import Engine from '@ember/engine';

export default class MyEngine extends Engine {
  dependencies = {
    services: ['session', 'store'],
  };
}

4.2 共享组件 #

javascript
// lib/my-engine/addon/engine.js
export default class MyEngine extends Engine {
  dependencies = {
    externalRoutes: ['login', 'home'],
  };
}

五、总结 #

Ember Engines要点:

概念 说明
Engine 独立模块
mount 挂载Engine
dependencies 依赖声明

Engines是构建大型应用的重要工具。

最后更新:2026-03-28