-
Notifications
You must be signed in to change notification settings - Fork 3
/
fuse.js
92 lines (81 loc) · 1.78 KB
/
fuse.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
const path = require('path');
const {
FuseBox,
WebIndexPlugin,
SassPlugin,
CSSResourcePlugin,
CSSPlugin,
PostCSSPlugin,
QuantumPlugin,
ImageBase64Plugin,
VueComponentPlugin
} = require('fuse-box')
const {src, task, context} = require('fuse-box/sparky')
class Builder {
constructor () {
this.isProduction = false
}
setProduction () {
this.isProduction = true
}
getFuse () {
return FuseBox.init({
homeDir: 'src',
target: 'browser@es5',
output: 'dist/$name.js',
sourceMaps: !this.isProduction,
useTypescriptCompiler : true,
allowSyntheticDefaultImports: true,
plugins: [
VueComponentPlugin(),
WebIndexPlugin({
template: 'src/index.html'
}),
[
'src/scss/app.scss',
SassPlugin(),
CSSResourcePlugin(),
PostCSSPlugin(),
CSSPlugin({
inject: false,
outFile: (file) => {
return `./dist/css/${path.basename(file)}`;
},
})],
ImageBase64Plugin(),
this.isProduction && QuantumPlugin({
bakeApiIntoBundle: 'app',
uglify: true,
css: true,
})
]
})
}
createBundle (fuse) {
const app = fuse.bundle('app')
if (!this.isProduction) {
app.hmr()
app.watch()
}
app.instructions('> index.ts')
return app
}
}
context(Builder)
task('clean', async () => {
await src('./dist')
.clean('dist/')
.exec()
})
task('default', ['clean'], async context => {
const fuse = context.getFuse()
fuse.dev()
context.createBundle(fuse)
await fuse.run()
})
task('build', ['clean'], async context => {
context.setProduction()
const fuse = context.getFuse()
context.createBundle(fuse)
await fuse.run()
})