UNPKG

@takingitglobal/a11ize

Version:

A React and JS Accessibility Toolkit

295 lines (292 loc) 7.38 kB
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', }, ], }, }, ];