/* global __dirname, module, process */ const path = require('path'); let bootstrap_ignore_modules = ['carousel', 'scrollspy']; const BOOTSTRAP_IGNORE_MODULES = (process.env.BOOTSTRAP_IGNORE_MODULES || '').replace(/ /g, '').trim(); if (BOOTSTRAP_IGNORE_MODULES.length > 0) { bootstrap_ignore_modules = bootstrap_ignore_modules.concat(BOOTSTRAP_IGNORE_MODULES.split(',')); } module.exports = { output: { path: path.resolve(__dirname, 'dist'), // Output path for generated bundles chunkFilename: '[name].js' }, entry: path.resolve(__dirname, 'src/entry.js'), externals: [{ "window": "window" }], watchOptions: { ignored: [/dist/, /spec/, /.*\~/] }, module: { rules: [ { test: path.resolve(__dirname, "node_modules/xss/dist/xss"), use: "exports-loader?filterXSS,filterCSS" }, { test: /\.(html|svg)$/, exclude: /node_modules/, use: [{ loader: 'lodash-template-webpack-loader', options: { "escape": /\{\{\{([\s\S]+?)\}\}\}/g, "evaluate": /\{\[([\s\S]+?)\]\}/g, "interpolate": /\{\{([\s\S]+?)\}\}/g, // By default, template places the values from your data in the // local scope via the with statement. However, you can specify // a single variable name with the variable setting. This can // significantly improve the speed at which a template is able // to render. "variable": 'o', "prependFilenameComment": __dirname } }] }, { test: /LC_MESSAGES\/converse.po$/, type: "json", use: [ { loader: 'po-loader', options: { 'format': 'jed', 'domain': 'converse' } } ] }, { test: /webfonts\/.*\.(woff(2)?|ttf|eot|truetype|svg)(\?v=\d+\.\d+\.\d+)?$/, use: [ { loader: 'file-loader', options: { name: '[name].[ext]', outputPath: 'webfonts/' } } ] }, { test: /\.scss$/, use: [ 'style-loader', { loader: 'css-loader', options: { sourceMap: true } }, 'postcss-loader', { loader: 'sass-loader', options: { sassOptions: { includePaths: [path.resolve(__dirname, 'node_modules/')] }, sourceMap: true } } ] }, { test: /\.js$/, include: /src/, use: { loader: 'babel-loader', options: { presets: [ ["@babel/preset-env", { "targets": { "browsers": [">1%", "not ie 11", "not op_mini all"] } }] ], plugins: [ '@babel/plugin-proposal-nullish-coalescing-operator', '@babel/plugin-proposal-optional-chaining', '@babel/plugin-syntax-dynamic-import' ] } } }, { test: /bootstrap\.native/, use: { loader: 'bootstrap.native-loader', options: { bs_version: 4, ignore: bootstrap_ignore_modules } } }], }, resolve: { extensions: ['.js'], modules: [ 'node_modules', path.resolve(__dirname, "src") ], alias: { "IPv6": path.resolve(__dirname, "node_modules/urijs/src/IPv6"), "SecondLevelDomains": path.resolve(__dirname, "node_modules/urijs/src/SecondLevelDomains"), "formdata-polyfill": path.resolve(__dirname, "node_modules/formdata-polyfill/FormData"), "punycode": path.resolve(__dirname, "node_modules/urijs/src/punycode") } } }