-
Notifications
You must be signed in to change notification settings - Fork 807
/
webpack.js
50 lines (39 loc) · 1.29 KB
/
webpack.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
import webpack from 'webpack';
/**
* @returns {Promise<webpack.Configuration>}
*/
export async function buildConfig() {
await Mix.dispatch('init');
return await webpackConfig.build();
}
export async function compile(config) {
config = config || (await buildConfig());
return new Promise((resolve, reject) => {
webpack(config, (err, stats) => {
if (err) {
reject({ config, err, stats });
} else if (stats.hasErrors()) {
const { errors } = stats.toJson({ errors: true });
reject(new Error(errors.map(error => error.message).join('\n')));
} else {
resolve({ config, err, stats });
}
});
});
}
export function setupVueAliases(version) {
let mockRequire = require('mock-require');
const vueModule = version === 3 ? 'vue3' : 'vue2';
const vueLoaderModule = version === 3 ? 'vue-loader16' : 'vue-loader15';
mockRequire('vue', vueModule);
mockRequire('vue-loader', vueLoaderModule);
mix.alias({ vue: require.resolve(vueModule) });
mix.webpackConfig({
resolveLoader: {
alias: {
'vue-loader': vueLoaderModule
}
}
});
}
export default { buildConfig, compile, setupVueAliases };