@takingitglobal/a11ize
Version:
A React and JS Accessibility Toolkit
295 lines (292 loc) • 7.38 kB
JavaScript
const path = require('path');
const { CleanWebpackPlugin } = require('clean-webpack-plugin');
const nodeExternals = require('webpack-node-externals');
// const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const nodeSass = require('node-sass');
const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer');
const isDevelopment = process.env.NODE_ENV === 'development';
const analyzeBundle = process.env.ANALYZE_BUNDLE;
module.exports = [
// Bare library (no bundled dependencies)
{
entry: './src/index.js',
externals: [nodeExternals()],
target: 'node',
output: {
filename: 'index.js',
libraryTarget: 'commonjs2',
path: path.join(__dirname, '/dist/bare'),
},
plugins: [new CleanWebpackPlugin()],
module: {
rules: [
{
test: /\.module\.s(a|c)ss$/,
loader: [
'style-loader',
{
loader: 'css-loader',
options: {
modules: {
exportLocalsConvention: 'dashes',
},
sourceMap: isDevelopment,
},
},
{
loader: 'sass-loader',
options: {
sourceMap: isDevelopment,
implementation: nodeSass,
},
},
],
},
{
test: /\.s(a|c)ss$/,
exclude: /\.module\.(s(a|c)ss)$/,
loader: [
'style-loader',
'css-loader',
{
loader: 'sass-loader',
options: {
sourceMap: isDevelopment,
},
},
],
},
{
test: /\.css$/,
loader: ['style-loader', 'css-loader'],
},
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: [
[
'@babel/preset-env',
{
targets: {
esmodules: true,
},
},
],
'@babel/preset-react',
],
},
},
},
{
test: /\.(png|woff|woff2|eot|ttf|svg|otf)$/,
loader: 'url-loader?limit=100000',
},
{
test: /\.ya?ml$/,
type: 'json', // Required by Webpack v4
use: 'yaml-loader',
},
],
},
},
// Library with bundled React (exported as a variable)
{
entry: './src/with-react.js',
output: {
filename: 'index.js',
library: 'a11ize',
libraryTarget: 'umd',
path: path.join(__dirname, '/dist/with-react'),
globalObject: 'this',
},
resolve: {
mainFields: ['module', 'main'],
alias: {
react: 'preact/compat',
'react-dom/test-utils': 'preact/test-utils',
'react-dom': 'preact/compat',
},
},
stats: {
// Examine all modules
maxModules: Infinity,
// Display bailout reasons
optimizationBailout: true,
},
plugins: [
new CleanWebpackPlugin(),
analyzeBundle
? new BundleAnalyzerPlugin({ analyzerPort: 1111 })
: () => {},
],
module: {
rules: [
{
test: /\.module\.s(a|c)ss$/,
loader: [
'style-loader',
{
loader: 'css-loader',
options: {
modules: {
exportLocalsConvention: 'dashes',
},
sourceMap: isDevelopment,
},
},
{
loader: 'sass-loader',
options: {
sourceMap: isDevelopment,
implementation: nodeSass,
},
},
],
},
{
test: /\.s(a|c)ss$/,
exclude: /\.module\.(s(a|c)ss)$/,
loader: [
'style-loader',
'css-loader',
{
loader: 'sass-loader',
options: {
sourceMap: isDevelopment,
},
},
],
},
{
test: /\.css$/,
loader: ['style-loader', 'css-loader'],
},
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env', '@babel/preset-react'],
},
},
},
{
test: /\.(woff|woff2|eot|ttf|otf)$/,
loader: 'file-loader',
},
{
test: /\.ya?ml$/,
type: 'json', // Required by Webpack v4
use: 'yaml-loader',
},
],
},
},
// Library with bundled React and CommonJS (exported as a variable)
{
entry: './src/with-react.js',
output: {
filename: 'index.js',
library: 'a11ize',
libraryTarget: 'umd',
path: path.join(__dirname, '/dist/with-react-cjs'),
globalObject: 'this',
},
resolve: {
mainFields: ['module', 'main'],
alias: {
react: 'preact/compat',
'react-dom/test-utils': 'preact/test-utils',
'react-dom': 'preact/compat',
},
},
stats: {
// Examine all modules
maxModules: Infinity,
// Display bailout reasons
optimizationBailout: true,
},
plugins: [
new CleanWebpackPlugin(),
analyzeBundle
? new BundleAnalyzerPlugin({ analyzerPort: 2222 })
: () => {},
],
module: {
rules: [
{
test: /\.module\.s(a|c)ss$/,
loader: [
'style-loader',
{
loader: 'css-loader',
options: {
modules: {
exportLocalsConvention: 'dashes',
},
sourceMap: isDevelopment,
},
},
{
loader: 'sass-loader',
options: {
sourceMap: isDevelopment,
implementation: nodeSass,
},
},
],
},
{
test: /\.s(a|c)ss$/,
exclude: /\.module\.(s(a|c)ss)$/,
loader: [
'style-loader',
'css-loader',
{
loader: 'sass-loader',
options: {
sourceMap: isDevelopment,
},
},
],
},
{
test: /\.css$/,
loader: ['style-loader', 'css-loader'],
},
{
test: /\.(js|jsx)$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: [
[
'@babel/preset-env',
{
useBuiltIns: 'usage',
corejs: 3,
},
],
'@babel/preset-react',
],
},
},
},
{
test: /\.(woff|woff2|eot|ttf|otf)$/,
loader: 'file-loader',
},
{
test: /\.ya?ml$/,
type: 'json', // Required by Webpack v4
use: 'yaml-loader',
},
],
},
},
];