Skip to content

Commit 61c60a2

Browse files
authored
Config code split (#562)
* change to one bundle first * config code split by babel-plugin-dynamic-import-node-sync * refactor * Use roadbog disableDynamicImport * fix typo * Fix require default
1 parent 668074c commit 61c60a2

File tree

3 files changed

+50
-14
lines changed

3 files changed

+50
-14
lines changed

β€Ž.webpackrc

+1
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@
1616
"html": {
1717
"template": "./src/index.ejs"
1818
},
19+
"disableDynamicImport": true,
1920
"hash": true
2021
}

β€Žsrc/common/router.js

+48-13
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,56 @@
1-
import React from 'react';
1+
import { createElement } from 'react';
22
import dynamic from 'dva/dynamic';
33
import { getMenuData } from './menu';
44

5+
let routerDataCache;
6+
7+
const modelNotExisted = (app, model) => (
8+
// eslint-disable-next-line
9+
!app._models.some(({ namespace }) => namespace === model)
10+
);
11+
512
// wrapper of dynamic
6-
const dynamicWrapper = (app, models, component) => dynamic({
7-
app,
8-
// eslint-disable-next-line no-underscore-dangle
9-
models: () => models.filter(m => !app._models.some(({ namespace }) => namespace === m)).map(m => import(`../models/${m}.js`)),
10-
// add routerData prop
11-
component: () => {
12-
const routerData = getRouterData(app);
13-
return component().then((raw) => {
14-
const Component = raw.default || raw;
15-
return props => <Component {...props} routerData={routerData} />;
13+
const dynamicWrapper = (app, models, component) => {
14+
// () => require('module')
15+
// transformed by babel-plugin-dynamic-import-node-sync
16+
if (component.toString().indexOf('.then(') < 0) {
17+
models.forEach((model) => {
18+
if (modelNotExisted(app, model)) {
19+
// eslint-disable-next-line
20+
app.model(require(`../models/${model}`).default);
21+
}
1622
});
17-
},
18-
});
23+
return (props) => {
24+
if (!routerDataCache) {
25+
routerDataCache = getRouterData(app);
26+
}
27+
return createElement(component().default, {
28+
...props,
29+
routerData: routerDataCache,
30+
});
31+
};
32+
}
33+
// () => import('module')
34+
return dynamic({
35+
app,
36+
models: () => models.filter(
37+
model => modelNotExisted(app, model)).map(m => import(`../models/${m}.js`)
38+
),
39+
// add routerData prop
40+
component: () => {
41+
if (!routerDataCache) {
42+
routerDataCache = getRouterData(app);
43+
}
44+
return component().then((raw) => {
45+
const Component = raw.default || raw;
46+
return props => createElement(Component, {
47+
...props,
48+
routerData: routerDataCache,
49+
});
50+
});
51+
},
52+
});
53+
};
1954

2055
function getFlatMenuData(menus) {
2156
let keys = {};

β€Žsrc/rollbar.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import Rollbar from 'rollbar';
22

3-
// Track error by https://sentry.io/
3+
// Track error by rollbar.com
44
if (location.host === 'preview.pro.ant.design') {
55
Rollbar.init({
66
accessToken: '033ca6d7c0eb4cc1831cf470c2649971',

0 commit comments

Comments
Β (0)