@waldronmatt/webpack-config v3.0.1
Webpack Config
A shareable webpack configuration with sensible defaults and extensible configs for assets.
Inspired by configuration practices found on survivejs.com.
Install
yarn add -D webpack webpack-merge webpack-cli @waldronmatt/webpack-configUsage
package.json
"scripts": {
"dev": "webpack --env development --config webpack.dev.js",
"build": "webpack --env production --config webpack.prod.js"
}\
webpack.dev.js
const { extendWebpackBaseConfig } = require('@waldronmatt/webpack-config');
const commonConfig = require('./webpack.common.js');
const developmentConfig = {
// dev configs
};
module.exports = extendWebpackBaseConfig(commonConfig, developmentConfig);\
webpack.prod.js
const { extendWebpackBaseConfig } = require('@waldronmatt/webpack-config');
const commonConfig = require('./webpack.common.js');
const productionConfig = {
// prod configs
};
module.exports = extendWebpackBaseConfig(commonConfig, productionConfig);\
webpack.common.js
- Use
isProductionto apply configs based on the environment. - Access Webpack's
envvariable. - Apply extensible base configs from
@waldronmatt/webpack-config. - Include your own extensible configs using your own parts via
const parts = require('./webpack.parts.js');. - Configs you set will take precedence if they overlap with
@waldronmatt/webpack-config.
const { merge } = require('webpack-merge');
const { baseParts } = require('@waldronmatt/webpack-config');
const parts = require('./webpack.parts.js');
const commonConfig = (isProduction, env) => {
// pass `isProduction` and Webpack's `env` variable into your parts file
parts(isProduction, env);
return merge([
{
entry: {
main: './src/index.js',
},
},
baseParts.loadJS({}),
baseParts.setScriptOutputPath({}),
baseParts.loadCSS({}),
baseParts.setStyleOutputPath({}),
// custom configs from your own `parts` file
parts.loadHTMLPages({
title: 'about',
}),
]);
};
module.exports = commonConfig;\
webpack.parts.js
Optionally set up your custom config parts to include in webpack.common.js.
const { MiniHtmlWebpackPlugin } = require('mini-html-webpack-plugin');
const parts = (isProduction, env) => {
module.exports.loadHTMLPages = ({ title } = { title: 'MySite' }) => ({
plugins: [
new MiniHtmlWebpackPlugin({
context: { title },
publicPath: isProduction ? 'mydomain' : '/',
}),
],
});
};
module.exports = parts;Options
You can load optional configs from this package into your own:
webpack.common.js
const { baseParts } = require('@waldronmatt/webpack-config');baseParts.loadCSS({})baseParts.loadSCSS({})baseParts.setStyleOutputPath({})baseParts.loadSourceMaps({})baseParts.loadJS({})baseParts.enableTypeChecking({})baseParts.setScriptOutputPath({})baseParts.loadImagesAsFiles({})baseParts.loadImagesAsFilesOrInline({})baseParts.loadFonts({})baseParts.loadRawAssets({})
Note: See /src/webpack.parts.js for configuration options.
Loaders
esbuild-loaderfork-ts-checker-webpack-plugincss-loaderpostcss-loadersass-loaderstyle-loadermini-css-extract-plugin.loadersource-map-loader
Plugins
mini-css-extract-pluginESBuildMinifyPlugin
Included Dependencies
sasstypescript
Core Package Dependencies
webpackwebpack-merge
License
MIT
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago