-
Notifications
You must be signed in to change notification settings - Fork 575
/
start.js
103 lines (92 loc) · 2.37 KB
/
start.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#!/usr/bin/env node
/* eslint-disable */
const fs = require('fs');
const inquirer = require('inquirer');
const signale = require('signale');
const rimraf = require('rimraf');
const rollup = require('rollup');
const postcss = require('rollup-plugin-postcss');
const resolve = require('rollup-plugin-node-resolve');
const replace = require('rollup-plugin-replace');
const commonjs = require('rollup-plugin-commonjs');
const typescript = require('rollup-plugin-typescript2');
const babel = require('rollup-plugin-babel');
const json = require('rollup-plugin-json');
const serve = require('rollup-plugin-serve');
const livereload = require('rollup-plugin-livereload');
const { version } = require('../package.json');
/* eslint-enable */
function start(name) {
const contentBase = `examples`;
// Clean
rimraf.sync(`${contentBase}/dist`);
signale.success('Clean success');
// Watch
const watcher = rollup.watch({
input: [`${contentBase}/${name}/index.tsx`],
output: {
file: `${contentBase}/dist/bundle.js`,
format: 'umd',
globals: {
react: 'React',
'react-dom': 'ReactDOM',
antd: 'antd',
},
},
plugins: [
postcss({
modules: {
camelCase: true,
generateScopedName: '[local]--[hash:base64:5]',
},
}),
resolve(),
replace({
'process.env.GG_EDITOR_VERSION': JSON.stringify(version),
}),
commonjs(),
typescript({
tsconfig: 'examples/tsconfig.json',
}),
babel({
exclude: 'node_modules/**',
extensions: ['.ts', '.tsx'],
}),
json(),
serve({
open: true,
contentBase,
port: 8080,
}),
livereload(),
],
external: ['react', 'react-dom', 'antd'],
});
watcher.on('event', event => {
const { code, error } = event;
switch (code) {
case 'START':
signale.info('Rebuild since file changed');
break;
case 'ERROR':
signale.error(error);
default:
break;
}
});
}
const choices = fs.readdirSync('examples').filter(name => {
return !['mock', 'dist', 'index.html', 'index.d.ts', 'tsconfig.json', '.DS_Store'].includes(name);
});
inquirer
.prompt([
{
type: 'list',
name: 'name',
message: 'Which example do you want to run?',
choices,
},
])
.then(({ name }) => {
start(name);
});