redoc/demo/webpack.config.ts

128 lines
3.1 KiB
TypeScript
Raw Normal View History

import * as CopyWebpackPlugin from 'copy-webpack-plugin';
2020-07-25 19:06:22 +03:00
import ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
import * as HtmlWebpackPlugin from 'html-webpack-plugin';
import { resolve } from 'path';
import * as webpack from 'webpack';
import { webpackIgnore } from '../config/webpack-utils';
2018-03-13 13:58:22 +03:00
const VERSION = JSON.stringify(require('../package.json').version);
const REVISION = JSON.stringify(
2020-07-25 19:06:22 +03:00
require('child_process').execSync('git rev-parse --short HEAD').toString().trim(),
2018-03-13 13:58:22 +03:00
);
2018-03-17 18:58:28 +03:00
function root(filename) {
return resolve(__dirname + '/' + filename);
}
export default (env: { playground?: boolean; bench?: boolean } = {}, { mode }) => ({
entry: [
root('../src/polyfills.ts'),
root(
env.playground
? 'playground/hmr-playground.tsx'
: env.bench
? '../benchmark/index.tsx'
: 'index.tsx',
2018-03-17 18:58:28 +03:00
),
],
target: 'web',
2018-03-13 13:58:22 +03:00
output: {
filename: 'redoc-demo.bundle.js',
2018-03-17 18:58:28 +03:00
path: root('dist'),
globalObject: 'this',
2018-03-13 13:58:22 +03:00
},
devServer: {
2021-12-09 13:38:03 +03:00
static: __dirname,
2018-03-17 18:58:28 +03:00
port: 9090,
hot: true,
2021-12-09 13:38:03 +03:00
historyApiFallback: true,
open: true,
2021-12-09 13:38:03 +03:00
},
stats: {
children: true,
2018-03-13 13:58:22 +03:00
},
resolve: {
extensions: ['.ts', '.tsx', '.js', '.json'],
fallback: {
path: require.resolve('path-browserify'),
buffer: require.resolve('buffer'),
http: false,
fs: false,
os: false,
},
2019-03-11 18:08:29 +03:00
alias:
mode !== 'production'
? {
'react-dom': '@hot-loader/react-dom',
}
2019-03-11 18:08:29 +03:00
: {},
2018-03-13 13:58:22 +03:00
},
2018-03-17 16:11:52 +03:00
2018-03-17 18:58:28 +03:00
performance: false,
externals: {
esprima: 'esprima',
'node-fetch': 'null',
2019-05-10 18:03:28 +03:00
'node-fetch-h2': 'null',
yaml: 'null',
'safe-json-stringify': 'null',
},
2018-03-13 13:58:22 +03:00
module: {
rules: [
{ test: [/\.eot$/, /\.gif$/, /\.woff$/, /\.svg$/, /\.ttf$/], use: 'null-loader' },
{
test: /\.(tsx?|[cm]?js)$/,
loader: 'esbuild-loader',
options: {
target: 'es2015',
tsconfigRaw: require('../tsconfig.json'),
},
exclude: [/node_modules/],
2018-03-13 13:58:22 +03:00
},
{
test: /\.css$/,
use: [
2022-01-27 14:46:05 +03:00
'style-loader',
'css-loader',
{
loader: 'esbuild-loader',
options: {
minify: true,
},
2018-03-13 13:58:22 +03:00
},
],
2018-03-13 13:58:22 +03:00
},
],
},
plugins: [
new webpack.DefinePlugin({
__REDOC_VERSION__: VERSION,
__REDOC_REVISION__: REVISION,
'process.env': '{}',
'process.platform': '"browser"',
'process.stdout': 'null',
2018-03-13 13:58:22 +03:00
}),
// new webpack.NamedModulesPlugin(),
// new webpack.optimize.ModuleConcatenationPlugin(),
2018-03-13 13:58:22 +03:00
new HtmlWebpackPlugin({
2018-10-18 10:40:26 +03:00
template: env.playground
? 'demo/playground/index.html'
: env.bench
? 'benchmark/index.html'
: 'demo/index.html',
2018-03-13 13:58:22 +03:00
}),
new webpack.ProvidePlugin({
Buffer: ['buffer', 'Buffer'],
}),
new ForkTsCheckerWebpackPlugin({ logger: { infrastructure: 'silent', issues: 'console' } }),
webpackIgnore(/js-yaml\/dumper\.js$/),
webpackIgnore(/json-schema-ref-parser\/lib\/dereference\.js/),
webpackIgnore(/^\.\/SearchWorker\.worker$/),
2020-07-25 19:06:22 +03:00
new CopyWebpackPlugin({
patterns: ['demo/museum.yaml'],
2020-07-25 19:06:22 +03:00
}),
2018-03-13 13:58:22 +03:00
],
2018-03-17 18:58:28 +03:00
});