Files
openlayers/examples/webpack/config.mjs
Maximilian Krög 839e1d1c65 Use non-symlinked ol.css for example-builder
File watching does not seem to work with symlinks
2022-08-14 16:36:48 +02:00

101 lines
2.5 KiB
JavaScript

import CopyPlugin from 'copy-webpack-plugin';
import ExampleBuilder from './example-builder.js';
import TerserPlugin from 'terser-webpack-plugin';
import fs from 'fs';
import path, {dirname} from 'path';
import {fileURLToPath} from 'url';
const baseDir = dirname(fileURLToPath(import.meta.url));
const src = path.join(baseDir, '..');
export default {
context: src,
target: ['web', 'es5'],
entry: () => {
const entry = {};
fs.readdirSync(src)
.filter((name) => /^(?!index).*\.html$/.test(name))
.map((name) => name.replace(/\.html$/, ''))
.forEach((example) => {
entry[example] = ['regenerator-runtime/runtime', `./${example}.js`];
});
return entry;
},
stats: 'minimal',
module: {
rules: [
{
test: /^((?!es2015-)[\s\S])*\.m?js$/,
use: {
loader: 'babel-loader',
options: {
presets: [
['@babel/preset-env', {targets: 'last 2 versions, not dead'}],
],
},
},
},
{
test: /\.js$/,
use: {
loader: path.join(baseDir, 'worker-loader.cjs'),
},
include: [path.join(baseDir, '..', '..', 'src', 'ol', 'worker')],
},
],
},
optimization: {
minimizer: [
new TerserPlugin({
// Do not minify examples that inject code into workers
exclude: [/(color-manipulation|region-growing|raster)\.js/],
extractComments: false,
}),
],
runtimeChunk: {
name: 'common',
},
splitChunks: {
name: 'common',
chunks: 'initial',
minChunks: 2,
},
},
plugins: [
new ExampleBuilder({
templates: path.join(baseDir, '..', 'templates'),
common: 'common',
}),
new CopyPlugin({
patterns: [
{from: '../site/src/theme', to: 'theme'},
{
from: path.join(baseDir, '..', '..', 'src', 'ol', 'ol.css'),
to: path.join(baseDir, '..', '..', 'theme', 'ol', 'ol.css'),
},
{from: 'data', to: 'data'},
{from: 'resources', to: 'resources'},
{from: 'index.html', to: 'index.html'},
{from: 'index.js', to: 'index.js'},
],
}),
],
devtool: 'source-map',
output: {
filename: '[name].js',
path: path.join(baseDir, '..', '..', 'build', 'examples'),
},
resolve: {
fallback: {
fs: false,
http: false,
https: false,
},
alias: {
// allow imports from 'ol/module' instead of specifiying the source path
ol: path.join(baseDir, '..', '..', 'src', 'ol'),
},
},
};