A tiny extension to the stock Ember Router that detects the presence of lazy route bundles and loads them when needed.
- Ember.js v3.28 or above
- Ember CLI v3.28 or above
- Node.js v16 or above
To get code-splitting, your app must build with Embroider. It's safe to use this router in apps that aren't building with Embroider, but it won't do anything.
When using lazily-loaded routes, the serialize
hook on Route
is not supported, because this would require us to load a Route
when someone is only linking to it, not actually visiting it.
Once you enable lazy loading of routes, any Route unit tests that try to lookup('route:your-route-name')
can fail because the route is not necessarily loaded. You can adjust your tests to explicitly import and register the Route:
import { module, test } from 'qunit';
import { setupTest } from 'ember-qunit';
+ import ExampleRoute from 'your-app/routes/example';
module('Unit | Route | example', function (hooks) {
setupTest(hooks);
+ hooks.beforeEach(function () {
+ this.owner.register('route:example', ExampleRoute);
+ });
test('it exists', function (assert) {
let route = this.owner.lookup('route:example');
assert.ok(route);
});
});
ember install @embroider/router
In your router.js
file, import our router instead of the stock one:
-import EmberRouter from '@ember/routing/router';
+import EmberRouter from '@embroider/router';
If you use the pod file layout for your routes, you have to make sure to set a non-undefined podModulePrefix
in your config/environment.js
. podModulePrefix: ''
is also allowed. Otherwise, your pod routes will not be picked up by Embroider.
This project is licensed under the MIT License.