2021-04-07 23:00:14 +03:00
|
|
|
/* eslint-disable max-len, import/no-extraneous-dependencies */
|
|
|
|
import path from 'path';
|
|
|
|
|
|
|
|
import webpack from 'webpack';
|
|
|
|
import CssMinimizerPlugin from 'css-minimizer-webpack-plugin';
|
|
|
|
import MiniCssExtractPlugin from 'mini-css-extract-plugin';
|
|
|
|
import TerserPlugin from 'terser-webpack-plugin';
|
|
|
|
|
|
|
|
import { getPlugins, getRules } from './webpack-common';
|
|
|
|
|
|
|
|
const makeConfig = ({ target, externals = {} }) => ({
|
|
|
|
mode: process.env.NODE_ENV,
|
|
|
|
devtool: false,
|
|
|
|
entry: {
|
|
|
|
'index': 'blog-utils',
|
|
|
|
},
|
|
|
|
output: {
|
|
|
|
filename: `${target}.js`,
|
|
|
|
library: {
|
|
|
|
name: 'AddonsFrontendBlogUtils',
|
|
|
|
type: 'umd',
|
|
|
|
},
|
|
|
|
globalObject: 'this',
|
2022-10-03 22:16:00 +03:00
|
|
|
publicPath: '',
|
2021-04-07 23:00:14 +03:00
|
|
|
},
|
|
|
|
target,
|
|
|
|
externals,
|
|
|
|
module: {
|
|
|
|
// Set a file limit to embed assets in CSS. It's needed to make this
|
|
|
|
// library easier to use in addons-blog.
|
|
|
|
rules: getRules({ fileLimit: 20000 }),
|
|
|
|
},
|
|
|
|
plugins: [
|
2022-07-06 21:09:35 +03:00
|
|
|
...getPlugins({ withBrowserWindow: target === 'web' }),
|
2021-04-07 23:00:14 +03:00
|
|
|
new webpack.NormalModuleReplacementPlugin(
|
|
|
|
/amo\/tracking/,
|
|
|
|
'blog-utils/tracking.js',
|
|
|
|
),
|
|
|
|
new MiniCssExtractPlugin({ filename: 'style.css' }),
|
|
|
|
],
|
|
|
|
resolve: {
|
|
|
|
modules: [path.resolve(__dirname, 'src'), 'node_modules'],
|
|
|
|
},
|
|
|
|
optimization: {
|
|
|
|
minimizer: [
|
|
|
|
new TerserPlugin({
|
|
|
|
extractComments: false,
|
|
|
|
terserOptions: {
|
|
|
|
output: {
|
|
|
|
comments: false,
|
|
|
|
},
|
|
|
|
compress: {
|
|
|
|
drop_console: true,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}),
|
|
|
|
new CssMinimizerPlugin(),
|
|
|
|
],
|
|
|
|
},
|
|
|
|
});
|
|
|
|
|
|
|
|
// This creates a webpack multi-config to generate two JS bundles (node and
|
|
|
|
// browser). The `target` value is used as filename.
|
|
|
|
export default [
|
|
|
|
makeConfig({ target: 'web' }),
|
|
|
|
makeConfig({
|
|
|
|
target: 'node',
|
|
|
|
externals: {
|
|
|
|
// Those dependencies are declared in the `package.json` file of this
|
|
|
|
// library.
|
|
|
|
jsdom: 'jsdom',
|
|
|
|
'node-fetch': 'commonjs2 node-fetch',
|
|
|
|
},
|
|
|
|
}),
|
|
|
|
];
|