assemble/webpack.config.js

100 lines
2.6 KiB
JavaScript

const {resolve} = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
//const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const isProduction = process.argv[process.argv.indexOf('--mode') + 1] === 'production';
module.exports = {
entry:[
resolve(__dirname,"ui/index.js")
],
output:{
path: resolve(__dirname,"./public/assets"),
filename: "bundle.js",
chunkFilename: isProduction ? "[contenthash:16].js" : "[name]-[contenthash:5].js",
publicPath: "/assets/",
clean: true
},
resolve: {
extensions: [
'.js',
'.jsx',
'.ts',
'.tsx',
'.css',
'.scss',
'.jpg',
'.jpeg',
'.png',
'.svg'
]
},
optimization:{
splitChunks:{
chunks: 'async'
},
chunkIds: "size",
moduleIds: "size",
mangleExports: "size"
},
stats: {
logging: 'warn',
},
cache: {
type: 'filesystem',
cacheLocation: resolve(__dirname, '.cache'),
cacheDirectory: resolve(__dirname, '.cache')
},
devtool: 'source-map',
target:"web",
module: {
rules: [{
test: /\.(jpe?g|png|svg|web[pm])$/i,
exclude: /node_modules/,
loader: "file-loader",
options: {
name: 'images/[name].[ext]',
},
},{
test: /.jsx?$/,
use: {
loader: 'babel-loader',
options: {
presets: [
[
"@babel/preset-env",
{
"targets": {
"browsers": ["last 2 Chrome versions"]
}
}
],
"@babel/preset-react"
],
plugins: [
"@babel/plugin-transform-runtime",
["@babel/plugin-proposal-class-properties", { "loose": true }]
]
}
}
},{
test: /\.s[ac]ss$|\.css$/i,
exclude: /node_modules/,
use: [
"style-loader",
"css-loader",
"sass-loader"
]
},{
test: /\.tsx?$/i,
exclude: /node_modules/,
use: {
loader: 'ts-loader',
options: {
transpileOnly: true
}
}
}]
}
}