@mamba/webpack
Version:
Webpack configs for Mamba Applications
62 lines (56 loc) • 1.92 kB
JavaScript
/**
* Webpack configuration for analyzing a production bundle
*/
const merge = require('webpack-merge');
const VirtualModulesPlugin = require('webpack-virtual-modules');
const webpack = require('webpack');
const { getPkg, fromCwd } = require('quickenv');
const getEntrypoints = require('./helpers/getEntrypoints.js');
const getVirtualFiles = require('./helpers/getVirtualFiles.js');
const MambaFixesPlugin = require('./plugins/MambaFixesPlugin.js');
const { BUNDLE_NAME, IS_BROWSER } = require('./helpers/consts.js');
const loaders = require('./helpers/loaders.js');
const PKG = getPkg();
module.exports = merge(require('./config.base.js'), {
entry: getEntrypoints(),
output: {
path: fromCwd('dist', BUNDLE_NAME),
},
resolve: {
modules: [fromCwd('src'), 'node_modules', fromCwd('vendors/packages')],
alias: (() => {
const aliases = {
page: fromCwd('node_modules', 'page'),
'core-js': fromCwd('node_modules', 'core-js'),
'@mamba/pos': fromCwd('node_modules', '@mamba', 'pos'),
};
if (IS_BROWSER) {
aliases.__APP_ICON__ = fromCwd('src', PKG.mamba.iconPath);
}
return aliases;
})(),
},
module: {
rules: [
/** Handle font imports */
{ test: /\.(eot|woff2?|otf|ttf)$/, use: [loaders.fonts] },
/** Handle image imports */
{ test: /\.(gif|jpe?g|png|ico|svg|bmp)$/, use: [loaders.images] },
],
},
plugins: [
/** If no real 'src/index.js' present, use the default virtual one */
new VirtualModulesPlugin(getVirtualFiles()),
/** Prepend the Function.prototype.bind() polyfill webpack's runtime code */
new MambaFixesPlugin(),
new webpack.DefinePlugin({
__APP_MANIFEST__: JSON.stringify({
name: PKG.name,
description: PKG.description,
version: PKG.version,
slug: `${PKG.mamba.id}-${PKG.name}`,
...PKG.mamba,
}),
}),
],
});