-
Notifications
You must be signed in to change notification settings - Fork 26
/
Copy pathwebpack.app.config.js
71 lines (61 loc) · 1.66 KB
/
webpack.app.config.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
const path = require('path');
const wm = require('webpack-merge').default;
const HtmlWebpackPlugin = require('html-webpack-plugin');
const { config: baseConfig, logger, ENV } = require('./webpack.config');
const CWD = process.cwd();
const distDir = path.resolve(CWD, 'app/dist');
const port = 8081;
let config = wm({}, baseConfig, {
mode: ENV.MODE,
devtool: false,
entry: {
XRRuntimeStartup: './src/XRRuntimeStartup.ts',
},
plugins: [
new HtmlWebpackPlugin({
template: `./src/manifest.json.ejs`,
inject: false,
filename: 'manifest.json',
}),
],
output: {
filename: ENV.MODE === 'development' ? '[name].js' : '[name].[contenthash].js',
publicPath: ENV.MODE === 'development' ? `http://localhost:${port}/` : '',
path: distDir,
},
...(ENV.MODE === 'development' && {
devServer: {
host: '0.0.0.0',
allowedHosts: 'all',
port: port,
client: { progress: true, overlay: false },
headers: {
'Feature-Policy': 'camera *',
'Access-Control-Allow-Origin': '*',
},
},
}),
});
config = applyEntry('index')(config);
module.exports = config;
function applyEntry(name) {
logger.info(`apply entry: ${name}`);
// 同时生成 {name} 和 {name}.html 文件(兼容)
const docFileNames = [name, name + '.html'];
return cfg => {
return wm(cfg, {
entry: { [name]: `./demo/${name}.tsx` },
plugins: [
...docFileNames.map(
filename =>
new HtmlWebpackPlugin({
template: `./demo/${name}.ejs`,
inject: false,
chunks: [name],
filename,
})
),
],
});
};
}