Skip to content

Commit 8b7717b

Browse files
committed
🎨 优化统一部分代码.
1 parent 7f62134 commit 8b7717b

File tree

15 files changed

+183
-267
lines changed

15 files changed

+183
-267
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -295,7 +295,7 @@ Examples:
295295
return updateMicro(api, name);
296296
});
297297

298-
// 对外抛出已注册的方法.
298+
// 对外触发已注册的方法.
299299
api.applyPluginHooks('beforeCommandUpdate', { name, logger, microsConfig });
300300

301301
```

plugins/commands/build.js

Lines changed: 9 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use strict';
22

3-
const ora = require('ora');
43
const chalk = require('chalk');
4+
const webpackAdapter = require('../../src/adapter');
55

66
module.exports = function buildCommand(api, opts) {
77

@@ -29,6 +29,7 @@ module.exports = function buildCommand(api, opts) {
2929
options: {
3030
'-': 'default webpack.',
3131
'-t <type>': 'adapter type, eg. [ webpack, vusion ].',
32+
'--progress': 'show how progress is reported during a compilation.',
3233
},
3334
details: `
3435
Examples:
@@ -38,60 +39,26 @@ Examples:
3839
}, args => {
3940
process.env.NODE_ENV = process.env.NODE_ENV || 'production';
4041
const type = args.t || 'webpack';
41-
return runServe(api, type);
42+
const progress = args.progress;
43+
return runBuild(api, { type, progress });
4244
});
4345
};
4446

45-
function runServe(api, type) {
47+
function runBuild(api, { type, progress }) {
4648
const logger = api.logger;
47-
const webpackConfig = api.getState('webpackConfig');
48-
49-
let webpackCompiler;
50-
let webpackDevOptions;
51-
52-
if (type === 'vusion') {
53-
const vusionAdapter = require('../../src/adapter/vusion')(webpackConfig, false, {
54-
modifyDefaultVusionConfig(vusionConfig) {
55-
return api.applyPluginHooks('modifyDefaultVusionConfig', vusionConfig);
56-
},
57-
resolveVusionConfig(vusionConfig) {
58-
return api.applyPluginHooks('modifyVusionConfig', vusionConfig);
59-
},
60-
resolveVusionWebpackConfig(vusionWebpackConfig) {
61-
return api.applyPluginHooks('modifyVusionWebpackConfig', vusionWebpackConfig);
62-
},
63-
});
64-
webpackCompiler = vusionAdapter.compiler;
65-
webpackDevOptions = vusionAdapter.devOptions || {};
66-
} else {
67-
const webpackAdapter = require('../../src/adapter/webpack')(webpackConfig, false);
68-
if (webpackAdapter) {
69-
webpackCompiler = webpackAdapter.compiler;
70-
webpackDevOptions = webpackAdapter.devOptions || {};
71-
}
72-
}
7349

7450
// [ 'post', 'host', 'contentBase', 'entrys', 'hooks' ]; // serverConfig
7551
const info = {
7652
type,
7753
config: api.config,
7854
serverConfig: api.serverConfig,
79-
onlyNode: false,
80-
webpackConfig,
8155
};
8256

83-
// 更新一次
84-
api.setState('webpackConfig', webpackConfig);
85-
86-
const { compiler, devOptions = {} } = api.applyPluginHooks('modifyWebpackCompiler', {
87-
type,
88-
webpackConfig,
89-
compiler: webpackCompiler,
90-
devOptions: webpackDevOptions,
91-
});
57+
const { compiler, devOptions, webpackConfig } = webpackAdapter(api, { type, isDev: false, progress });
9258

9359
info.compiler = compiler;
9460
info.devOptions = devOptions;
61+
info.webpackConfig = webpackConfig;
9562

9663
return new Promise((resolve, reject) => {
9764
const spinner = logger.spinner('Building for production...');
@@ -106,13 +73,13 @@ function runServe(api, type) {
10673
return reject(err);
10774
}
10875

109-
process.stdout.write(stats.toString({
76+
process.stdout.write(stats.toString(Object.assign({
11077
colors: true,
11178
modules: false,
11279
children: false,
11380
chunks: false,
11481
chunkModules: false,
115-
}) + '\n');
82+
}, webpackConfig.stats || {})) + '\n');
11683

11784
api.applyPluginHooks('onBuildSuccess', stats);
11885
// 处理完成

plugins/commands/serve/dev.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
'use strict';
2+
3+
const chalk = require('chalk');
4+
const runServe = require('./runServe');
5+
6+
module.exports = function devCommand(api, opts) {
7+
8+
// serve
9+
api.registerCommand('serve', {
10+
description: 'runs server for development',
11+
usage: 'micro-app serve [options]',
12+
options: {
13+
'-': 'default webpack.',
14+
'-t <type>': 'adapter type, eg. [ webpack, vusion ].',
15+
'-h <host>': 'node server host.',
16+
'-p <port>': 'node server port.',
17+
'--only-node': 'only run node server.',
18+
'--open-soft-link': '启用开发软链接',
19+
'--open-disabled-entry': '支持可配置禁用部分模块入口.',
20+
},
21+
details: `
22+
Examples:
23+
${chalk.gray('# vusion')}
24+
micro-app serve -t vusion
25+
${chalk.gray('# open soft link')}
26+
micro-app serve -t vusion --open-soft-link
27+
`.trim(),
28+
}, args => {
29+
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
30+
const type = args.t || 'webpack';
31+
const onlyNode = args.onlyNode || false;
32+
const host = args.h;
33+
const port = args.p;
34+
const progress = args.progress;
35+
return runServe(api, true, { type, onlyNode, host, port, progress });
36+
});
37+
};

plugins/commands/serve/index.js

Lines changed: 4 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
'use strict';
22

3-
const chalk = require('chalk');
43
const registerMethods = require('./methods');
54
const registerVusionMethods = require('./vusionMethods');
6-
const runServe = require('./runServe');
5+
const startCommand = require('./start');
6+
const devCommand = require('./dev');
77

88
module.exports = function serveCommand(api, opts) {
99

@@ -13,59 +13,8 @@ module.exports = function serveCommand(api, opts) {
1313
registerVusionMethods(api);
1414

1515
// start
16-
api.registerCommand('start', {
17-
description: 'runs server for production',
18-
usage: 'micro-app start [options]',
19-
options: {
20-
'-': 'default webpack.',
21-
'-t <type>': 'adapter type, eg. [ webpack, vusion ].',
22-
'-h <host>': 'node server host.',
23-
'-p <port>': 'node server port.',
24-
'--only-node': 'only run node server.',
25-
'--progress': 'show how progress is reported during a compilation.',
26-
},
27-
details: `
28-
Examples:
29-
${chalk.gray('# vusion')}
30-
micro-app start -t vusion
31-
`.trim(),
32-
}, args => {
33-
process.env.NODE_ENV = process.env.NODE_ENV || 'production';
34-
const type = args.t || 'webpack';
35-
const onlyNode = args.onlyNode || false;
36-
const host = args.h;
37-
const port = args.p;
38-
const progress = args.progress;
39-
return runServe(api, false, { type, onlyNode, host, port, progress });
40-
});
16+
startCommand(api, opts);
4117

4218
// serve
43-
api.registerCommand('serve', {
44-
description: 'runs server for development',
45-
usage: 'micro-app serve [options]',
46-
options: {
47-
'-': 'default webpack.',
48-
'-t <type>': 'adapter type, eg. [ webpack, vusion ].',
49-
'-h <host>': 'node server host.',
50-
'-p <port>': 'node server port.',
51-
'--only-node': 'only run node server.',
52-
'--open-soft-link': '启用开发软链接',
53-
'--open-disabled-entry': '支持可配置禁用部分模块入口.',
54-
},
55-
details: `
56-
Examples:
57-
${chalk.gray('# vusion')}
58-
micro-app serve -t vusion
59-
${chalk.gray('# open soft link')}
60-
micro-app serve -t vusion --open-soft-link
61-
`.trim(),
62-
}, args => {
63-
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
64-
const type = args.t || 'webpack';
65-
const onlyNode = args.onlyNode || false;
66-
const host = args.h;
67-
const port = args.p;
68-
const progress = args.progress;
69-
return runServe(api, true, { type, onlyNode, host, port, progress });
70-
});
19+
devCommand(api, opts);
7120
};

plugins/commands/serve/methods.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,9 @@ module.exports = api => {
3838
type: api.API_TYPE.EVENT,
3939
description: '开发服务创建后事件',
4040
});
41+
api.registerMethod('modifyStaticServerOptions', {
42+
type: api.API_TYPE.MODIFY,
43+
description: '对静态服务配置进行修改, 需要返回所有参数',
44+
});
4145

4246
};

plugins/commands/serve/runServe.js

Lines changed: 4 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -1,91 +1,30 @@
11
'use strict';
22

3-
const tryRequire = require('try-require');
43
const chalk = require('chalk');
54
const createServer = require('../../../src/server/createServer');
5+
const webpackAdapter = require('../../../src/adapter');
66

77
module.exports = function runServe(api, isDev, { type, onlyNode, progress, port, host }) {
8-
const webpackConfig = api.getState('webpackConfig');
9-
10-
let webpackCompiler;
11-
let webpackDevOptions;
12-
13-
if (isDev) {
14-
if (type === 'vusion') {
15-
const vusionAdapter = require('../../../src/adapter/vusion')(webpackConfig, isDev, {
16-
modifyDefaultVusionConfig(vusionConfig) {
17-
return api.applyPluginHooks('modifyDefaultVusionConfig', vusionConfig);
18-
},
19-
resolveVusionConfig(vusionConfig) {
20-
return api.applyPluginHooks('modifyVusionConfig', vusionConfig);
21-
},
22-
resolveVusionWebpackConfig(vusionWebpackConfig) {
23-
return api.applyPluginHooks('modifyVusionWebpackConfig', vusionWebpackConfig);
24-
},
25-
});
26-
webpackCompiler = vusionAdapter.compiler;
27-
webpackDevOptions = vusionAdapter.devOptions || {};
28-
} else {
29-
const webpackAdapter = require('../../../src/adapter/webpack')(webpackConfig, isDev);
30-
if (webpackAdapter) {
31-
webpackCompiler = webpackAdapter.compiler;
32-
webpackDevOptions = webpackAdapter.devOptions || {};
33-
}
34-
}
35-
}
36-
37-
// 更新一次
38-
api.setState('webpackConfig', webpackConfig);
39-
408
// [ 'post', 'host', 'contentBase', 'entrys', 'hooks' ]; // serverConfig
419
const startInfo = {
4210
type,
4311
config: api.config,
4412
serverConfig: api.serverConfig,
4513
onlyNode,
46-
webpackConfig,
4714
isDev,
4815
port, host,
4916
};
5017

5118
if (isDev) {
52-
const { compiler, devOptions = {} } = api.applyPluginHooks('modifyWebpackCompiler', {
53-
type,
54-
webpackConfig,
55-
compiler: webpackCompiler,
56-
devOptions: webpackDevOptions,
57-
});
58-
59-
if (progress) {
60-
const webpack = tryRequire('webpack');
61-
if (webpack) {
62-
let spinner;
63-
compiler.apply(new webpack.ProgressPlugin({
64-
modules: false,
65-
profile: false,
66-
handler: (percentage, message, ...args) => {
67-
if (!spinner && percentage <= 0) {
68-
spinner = api.logger.spinner('Compiling...');
69-
spinner.start();
70-
}
71-
if (spinner) {
72-
spinner.text = Number(percentage * 100).toFixed(2) + '% ' + chalk.gray(`( ${message} )`);
73-
}
74-
// api.logger.logo(percentage, message, ...args);
75-
if (spinner && percentage >= 1) {
76-
spinner.succeed('Compiled OK!');
77-
spinner = null;
78-
}
79-
},
80-
}));
81-
}
82-
}
19+
const { compiler, devOptions, webpackConfig } = webpackAdapter(api, { type, isDev, progress });
8320

8421
startInfo.compiler = compiler;
8522
startInfo.devOptions = devOptions;
23+
startInfo.webpackConfig = webpackConfig;
8624

8725
api.applyPluginHooks('beforeDevServer', startInfo);
8826
}
27+
8928
return createServer(startInfo, api)
9029
.then(({ url }) => {
9130
api.logger.info(`Open Browser, URL: ${chalk.yellow(url)}`);

plugins/commands/serve/start.js

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
'use strict';
2+
3+
const chalk = require('chalk');
4+
const runServe = require('./runServe');
5+
6+
module.exports = function startCommand(api, opts) {
7+
8+
// start
9+
api.registerCommand('start', {
10+
description: 'runs server for production',
11+
usage: 'micro-app start [options]',
12+
options: {
13+
'-': 'default webpack.',
14+
'-t <type>': 'adapter type, eg. [ webpack, vusion ].',
15+
'-h <host>': 'node server host.',
16+
'-p <port>': 'node server port.',
17+
'--only-node': 'only run node server.',
18+
'--progress': 'show how progress is reported during a compilation.',
19+
},
20+
details: `
21+
Examples:
22+
${chalk.gray('# vusion')}
23+
micro-app start -t vusion
24+
`.trim(),
25+
}, args => {
26+
process.env.NODE_ENV = process.env.NODE_ENV || 'production';
27+
const type = args.t || 'webpack';
28+
const onlyNode = args.onlyNode || false;
29+
const host = args.h;
30+
const port = args.p;
31+
const progress = args.progress;
32+
return runServe(api, false, { type, onlyNode, host, port, progress });
33+
});
34+
};

0 commit comments

Comments
 (0)