Skip to content

Commit cded08f

Browse files
authored
feat: improve dev speed (umijs#4391)
* feat: improve dev speed * feat: improve dev speed * feat: improve dev speed * chore: remove devExternals * fix: ci
1 parent b3d0ef5 commit cded08f

File tree

20 files changed

+13667
-233
lines changed

20 files changed

+13667
-233
lines changed

packages/bundler-webpack/bundled/webpackHotDevClient.js

Lines changed: 13299 additions & 0 deletions
Large diffs are not rendered by default.

packages/bundler-webpack/config.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
export default {
2+
outputPath: './bundled/',
3+
entry: {
4+
webpackHotDevClient: './src/webpackHotDevClient/webpackHotDevClient',
5+
},
6+
nodeModulesTransform: {
7+
type: 'none',
8+
},
9+
devtool: false,
10+
define: {
11+
'process.env': {},
12+
},
13+
};

packages/bundler-webpack/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
"types": "lib/index.d.ts",
77
"files": [
88
"lib",
9-
"bin"
9+
"bin",
10+
"bundled"
1011
],
1112
"repository": {
1213
"type": "git",

packages/bundler-webpack/src/cli.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,16 @@ if (args.version && !command) {
3838
}
3939

4040
(async () => {
41+
const configPath = join(cwd, args.config || 'config.ts');
42+
const babelRegister = new BabelRegister();
43+
babelRegister.setOnlyMap({
44+
key: 'config',
45+
value: [configPath],
46+
});
47+
const config = existsSync(configPath)
48+
? compatESModuleRequire(require(configPath))
49+
: {};
50+
4151
let entry: string = args.entry;
4252
if (entry) {
4353
entry = join(cwd, entry);
@@ -58,16 +68,6 @@ if (args.version && !command) {
5868
entry = files[0]?.path!;
5969
}
6070

61-
const configPath = join(cwd, args.config || 'config.ts');
62-
const babelRegister = new BabelRegister();
63-
babelRegister.setOnlyMap({
64-
key: 'config',
65-
value: [configPath],
66-
});
67-
const config = existsSync(configPath)
68-
? compatESModuleRequire(require(configPath))
69-
: {};
70-
7171
const bundler = new Bundler({
7272
cwd,
7373
config,
@@ -77,7 +77,7 @@ if (args.version && !command) {
7777
env,
7878
type: ConfigType.csr,
7979
hot: args.hot,
80-
entry: {
80+
entry: config.entry || {
8181
[basename(entry, extname(entry))]: entry,
8282
},
8383
});

packages/bundler-webpack/src/getConfig/getConfig.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,11 @@ test('opts.entry + opts.hot', async () => {
6969
},
7070
hot: true,
7171
});
72+
// webpackHotDevClient 不再有了
7273
// @ts-ignore
73-
expect(config.entry!.bar[0]).toContain('webpackHotDevClient');
74+
// expect(config.entry!.bar[0]).toContain('webpackHotDevClient');
7475
// @ts-ignore
75-
expect(config.entry!.bar[1]).toEqual('bar.js');
76+
expect(config.entry!.bar[0]).toEqual('bar.js');
7677
});
7778

7879
test('config.devtool + development', async () => {

packages/bundler-webpack/src/getConfig/getConfig.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import css, { createCSSRule } from './css';
1616
import terserOptions from './terserOptions';
1717
import { objToStringified } from './utils';
1818
import {
19-
isMatch,
2019
TYPE_ALL_EXCLUDE,
20+
isMatch,
2121
excludeToPkgs,
2222
es5ImcompatibleVersionsToPkg,
2323
} from './nodeModulesTransform';
@@ -74,9 +74,10 @@ export default async function getConfig(
7474
if (entry) {
7575
Object.keys(entry).forEach((key) => {
7676
const e = webpackConfig.entry(key);
77-
if (hot && isDev) {
78-
e.add(require.resolve('../webpackHotDevClient/webpackHotDevClient'));
79-
}
77+
// 提供打包好的版本,不消耗 webpack 编译时间
78+
// if (hot && isDev) {
79+
// e.add(require.resolve('../webpackHotDevClient/webpackHotDevClient'));
80+
// }
8081
if (config.runtimePublicPath) {
8182
e.add(require.resolve('./runtimePublicPathEntry'));
8283
}
@@ -85,10 +86,14 @@ export default async function getConfig(
8586
}
8687

8788
// devtool
89+
const devtool = config.devtool as Config.DevTool;
8890
webpackConfig.devtool(
8991
isDev
90-
? (config.devtool as Config.DevTool) || 'cheap-module-source-map'
91-
: (config.devtool as Config.DevTool),
92+
? // devtool 设为 false 时不 fallback 到 cheap-module-source-map
93+
devtool === false
94+
? false
95+
: devtool || 'cheap-module-source-map'
96+
: devtool,
9297
);
9398

9499
const useHash = config.hash && isProd;

packages/bundler-webpack/src/webpackHotDevClient/handlers.ts

Lines changed: 0 additions & 134 deletions
This file was deleted.

0 commit comments

Comments
 (0)