Skip to content

Commit e8e73fe

Browse files
committed
🎨 改动半成品
1 parent 0e45830 commit e8e73fe

File tree

21 files changed

+527
-50
lines changed

21 files changed

+527
-50
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ module.exports = {
6060
server: {
6161
entry: '', // 服务端入口
6262
port: 8088, // 服务端口号
63-
staticBase: 'public', // 静态文件地址
63+
// staticBase: 'public', // 静态文件地址
64+
contentBase: 'public', // 静态文件地址
6465
options: {
6566
// 服务端回调参数
6667
},

bin/micro-app-build.js

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33

44
const program = require('commander');
55
const microApp = require('@micro-app/core');
6+
const logger = microApp.logger;
7+
const microAppAdapter = require('@micro-app/plugin-adapter');
68

79
program
810
.version(require('../package').version, '-v, --version')
@@ -13,23 +15,11 @@ process.env.NODE_ENV = 'production';
1315

1416
global.extraArgs = program.args;
1517

16-
const type = program.type;
17-
let wbpackAdapter = null;
18-
switch (type) {
19-
case 'vusion':
20-
wbpackAdapter = new microApp.VusionAdapter();
21-
break;
22-
case 'vusioncore':
23-
wbpackAdapter = new microApp.VusionCoreAdapter();
24-
break;
25-
case 'webpack':
26-
default:
27-
wbpackAdapter = new microApp.WebpackAdapter();
28-
break;
29-
}
18+
const type = program.type || 'webpack';
19+
const wbpackAdapter = microAppAdapter(type);
3020

3121
wbpackAdapter.build().then(() => {
32-
console.info('>>> Build Success >>>');
22+
logger.success('>>> Build Success >>>');
3323
}).catch(e => {
34-
console.error('>>> Build Error >>>', e);
24+
logger.error('>>> Build Error >>>', e);
3525
});

bin/micro-app-dev.js

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ const chalk = require('chalk').default;
77

88
const microApp = require('@micro-app/core');
99
const logger = microApp.logger;
10+
const microAppAdapter = require('@micro-app/plugin-adapter');
1011

1112
program
1213
.version(require('../package').version, '-v, --version')
@@ -21,23 +22,11 @@ process.env.NODE_ENV = 'development';
2122

2223
global.extraArgs = program.args;
2324

24-
const type = program.type;
25-
// const wbpackAdapter = program.type === 'vusion' ? new microApp.VusionAdapter() : new microApp.WebpackAdapter();
26-
let wbpackAdapter = null;
27-
switch (type) {
28-
case 'vusion':
29-
wbpackAdapter = new microApp.VusionAdapter();
30-
break;
31-
case 'vusioncore':
32-
wbpackAdapter = new microApp.VusionCoreAdapter();
33-
break;
34-
case 'webpack':
35-
default:
36-
wbpackAdapter = new microApp.WebpackAdapter();
37-
break;
38-
}
39-
40-
const koaAdapter = new microApp.KoaAdapter(wbpackAdapter, program);
25+
const type = program.type || 'webpack';
26+
const wbpackAdapter = microAppAdapter(type);
27+
28+
const KoaAdapter = microAppAdapter('koa');
29+
const koaAdapter = new KoaAdapter(wbpackAdapter, program);
4130
koaAdapter.serve(url => {
4231
// success
4332
if (program.openBrowser) {

bin/micro-app-start.js

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ const chalk = require('chalk').default;
66

77
const microApp = require('@micro-app/core');
88
const logger = microApp.logger;
9+
const microAppAdapter = require('@micro-app/plugin-adapter');
910

1011
program
1112
.version(require('../package').version, '-v, --version')
@@ -18,21 +19,8 @@ process.env.NODE_ENV = 'production';
1819

1920
global.extraArgs = program.args;
2021

21-
22-
// const wbpackAdapter = program.type === 'vusion' ? new microApp.VusionAdapter() : new microApp.WebpackAdapter();
23-
let wbpackAdapter = null;
24-
switch (program.type) {
25-
case 'vusion':
26-
wbpackAdapter = new microApp.VusionAdapter();
27-
break;
28-
case 'vusioncore':
29-
wbpackAdapter = new microApp.VusionCoreAdapter();
30-
break;
31-
case 'webpack':
32-
default:
33-
wbpackAdapter = new microApp.WebpackAdapter();
34-
break;
35-
}
22+
const type = program.type || 'webpack';
23+
const wbpackAdapter = microAppAdapter(type);
3624

3725
let promise = Promise.resolve();
3826
if (program.build) {
@@ -45,7 +33,8 @@ promise.then(flag => {
4533
if (flag) {
4634
logger.success('Build finish');
4735
}
48-
const koaAdapter = new microApp.KoaAdapter(wbpackAdapter, program);
36+
const KoaAdapter = microAppAdapter('koa');
37+
const koaAdapter = new KoaAdapter(wbpackAdapter, program);
4938
koaAdapter.start(url => {
5039
// success
5140
logger.info(`Open Browser, URL: ${chalk.yellow(url)}`);

libs/Service.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
'use strict';
2+
3+
const microApp = require('@micro-app/core');

plugins/commands/serve.js

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
'use strict';
2+
3+
const chalk = require('chalk');
4+
const createServer = require('./createServer');
5+
6+
module.exports = function(api, opts) {
7+
8+
api.registerMethod('onServerInit', {
9+
type: api.API_TYPE.EVENT,
10+
description: '服务初始化时事件',
11+
});
12+
api.registerMethod('onServerInitDone', {
13+
type: api.API_TYPE.EVENT,
14+
description: '服务初始化完成事件',
15+
});
16+
api.registerMethod('beforeServerEntry', {
17+
type: api.API_TYPE.EVENT,
18+
description: '服务进入业务逻辑前事件',
19+
});
20+
api.registerMethod('afterServerEntry', {
21+
type: api.API_TYPE.EVENT,
22+
description: '服务从业务逻辑出来后事件',
23+
});
24+
api.registerMethod('modifyWebpackCompiler', {
25+
type: api.API_TYPE.MODIFY,
26+
description: '对服务启动前 webpack compiler 进行修改',
27+
});
28+
29+
// start
30+
api.registerCommand('start', {
31+
description: 'runs server for production',
32+
usage: 'micro-app start [options]',
33+
options: {
34+
'-t <type>': 'adapter type, eg. [ webpack, vusion ].',
35+
},
36+
details: `
37+
Examples:
38+
${chalk.gray('# vusion')}
39+
micro-app start -t vusion
40+
`.trim(),
41+
}, args => {
42+
const type = args.t || 'webpack';
43+
return runServe(api, type, false);
44+
});
45+
46+
// serve
47+
api.registerCommand('serve', {
48+
description: 'runs server for development',
49+
usage: 'micro-app serve [options]',
50+
options: {
51+
'-t <type>': 'adapter type, eg. [ webpack, vusion ].',
52+
},
53+
details: `
54+
Examples:
55+
${chalk.gray('# vusion')}
56+
micro-app serve -t vusion
57+
`.trim(),
58+
}, args => {
59+
const type = args.t || 'webpack';
60+
return runServe(api, type, true);
61+
});
62+
};
63+
64+
function runServe(api, type, isDev) {
65+
const webpackConfig = api.getState('webpackConfig');
66+
67+
let webpackCompiler;
68+
let webpackDevOptions;
69+
70+
if (type === 'vusion') {
71+
const vusionAdapter = require('../../src/adapter/vusion')(webpackConfig, isDev);
72+
webpackCompiler = vusionAdapter.compiler;
73+
webpackDevOptions = vusionAdapter.devOptions || {};
74+
}
75+
76+
let { compiler, devOptions = {} } = api.applyPluginHooks('modifyWebpackCompiler', {
77+
type,
78+
webpackConfig,
79+
compiler: webpackCompiler,
80+
devOptions: webpackDevOptions,
81+
});
82+
83+
if (!compiler) { // 如果为空
84+
const webpackAdapter = require('../../src/adapter/webpack')(webpackConfig, isDev);
85+
compiler = webpackAdapter.compiler;
86+
devOptions = webpackAdapter.devOptions || {};
87+
}
88+
89+
// [ 'post', 'host', 'contentBase', 'entrys', 'hooks' ]; // serverConfig
90+
const startInfo = {
91+
type,
92+
config: api.config,
93+
serverConfig: api.serverConfig,
94+
onlyNode: false,
95+
webpackConfig,
96+
compiler,
97+
devOptions,
98+
};
99+
100+
return createServer({ ...startInfo,
101+
isDev,
102+
}, api);
103+
}

plugins/commands/version.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
'use strict';
2+
3+
const chalk = require('chalk');
4+
5+
module.exports = function(api) {
6+
api.registerCommand('version', {
7+
description: 'show version',
8+
usage: '',
9+
options: '',
10+
details: '',
11+
}, () => {
12+
const pkg = require('../../package.json');
13+
const version = pkg.version;
14+
15+
api.logger.logo();
16+
api.logger.logo(`${chalk.green('Version')}: ${chalk.yellow(version)}`);
17+
api.logger.logo();
18+
});
19+
};
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
'use strict';
2+
3+
const devMiddleware = require('webpack-dev-middleware');
4+
5+
module.exports = function(compiler, opts) {
6+
7+
const expressMiddleware = devMiddleware(compiler, opts);
8+
9+
async function middleware(ctx, next) {
10+
await expressMiddleware(ctx.req, {
11+
end: content => {
12+
ctx.body = content;
13+
},
14+
setHeader: (name, value) => {
15+
ctx.set(name, value);
16+
},
17+
}, next);
18+
}
19+
20+
middleware.getFilenameFromUrl = expressMiddleware.getFilenameFromUrl;
21+
middleware.waitUntilValid = expressMiddleware.waitUntilValid;
22+
middleware.invalidate = expressMiddleware.invalidate;
23+
middleware.close = expressMiddleware.close;
24+
middleware.fileSystem = expressMiddleware.fileSystem;
25+
26+
return middleware;
27+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
'use strict';
2+
3+
const hotMiddleware = require('webpack-hot-middleware');
4+
const { PassThrough } = require('stream');
5+
6+
module.exports = function(compiler, opts) {
7+
const expressMiddleware = hotMiddleware(compiler, opts);
8+
return async (ctx, next) => {
9+
const stream = new PassThrough();
10+
ctx.body = stream;
11+
await expressMiddleware(ctx.req, {
12+
write: stream.write.bind(stream),
13+
writeHead: (status, headers) => {
14+
ctx.status = status;
15+
ctx.set(headers);
16+
},
17+
}, next);
18+
};
19+
};
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
'use strict';
2+
3+
const devMiddleware = require('./devMiddleware');
4+
const hotMiddleware = require('./hotMiddleware');
5+
module.exports = { devMiddleware, hotMiddleware };

0 commit comments

Comments
 (0)