forked from rossning92/movy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
webpack.config.js
102 lines (99 loc) · 2.47 KB
/
webpack.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
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
const CopyPlugin = require('copy-webpack-plugin');
const fs = require('fs');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const path = require('path');
const webpack = require('webpack');
const examples = (() => {
const base = path.resolve(__dirname, 'src');
return (function traverse(d) {
const children = [];
fs.readdirSync(`${base}/${d}`).forEach((f) => {
if (f.endsWith('.js')) {
children.push({ name: f, children: [], path: `${d}/${f}` });
} else if (fs.statSync(`${base}/${d}/${f}`).isDirectory()) {
children.push({ name: f, children: traverse(`${d}/${f}`) });
}
});
return children;
})('examples');
})();
function generateConfig({ name, entry, plugins = [], outputModule = false } = {}) {
return {
entry,
resolve: {
extensions: ['.js', '.ts', '.json'],
fallback: {
fs: false, // workaround for ccapture.js referencing fs module
},
},
plugins,
experiments: {
outputModule,
},
output: {
path: path.resolve(__dirname, 'dist'),
filename: `${name}.js`,
library: {
type: outputModule ? 'module' : 'umd',
},
umdNamedDefine: true,
},
module: {
rules: [
{
test: /\.tsx?$/,
use: {
loader: 'ts-loader',
options: {
configFile: path.resolve(__dirname, 'tsconfig.json'),
},
},
},
{
test: /\.jsx?$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
},
},
{
test: /\.css$/i,
use: ['style-loader', 'css-loader'],
},
],
},
};
}
module.exports = [
generateConfig({ name: 'movy', entry: './src/movy.ts', outputModule: true }),
generateConfig({
name: 'editor',
entry: './src/editor.tsx',
plugins: [
new webpack.DefinePlugin({
examples: JSON.stringify(examples),
}),
new CopyPlugin({
patterns: [
{
from: 'node_modules/mathjax/es5',
to: 'mathjax',
info: { minimized: true },
},
{
from: 'assets',
info: { minimized: true },
},
{
from: 'src/examples',
to: 'examples',
info: { minimized: true },
},
],
}),
new HtmlWebpackPlugin({
template: path.resolve(__dirname, 'editor.html'),
}),
],
}),
];