UNPKG

kk-webpack-base--config

Version:

Webpack config for kk-webpack-base

144 lines (142 loc) 3.11 kB
const path = require('path'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const { config } = require('./webpack.project-config.js'); const { isDev } = require('./webpack.helpers'); module.exports = [ { test: /\.vue$/, loader: 'vue-loader', options: { compilerOptions: { // treat all tags with a dash as custom elements isCustomElement: (tag) => tag.includes('-'), }, }, }, { test: /\.(?:js|mjs|cjs)$/, exclude: /node_modules/, include: path.resolve(process.cwd(), `${config.sourcePath}`), use: { loader: 'swc-loader', options: { jsc: { parser: { syntax: 'ecmascript', jsx: true, decorators: true, }, transform: { react: { runtime: 'automatic', }, }, target: 'es2020', }, }, }, }, { test: /\.(ts|tsx)$/, exclude: /node_modules/, include: path.resolve(process.cwd(), `${config.sourcePath}`), use: { loader: 'swc-loader', options: { jsc: { parser: { syntax: 'typescript', tsx: true, decorators: true, }, transform: { react: { runtime: 'automatic', }, }, target: 'es2020', }, }, }, }, { test: /\.(scss|css)$/, use: [ MiniCssExtractPlugin.loader, { loader: 'css-loader', options: { url: false, importLoaders: 2, sourceMap: isDev, }, }, { loader: 'postcss-loader', options: { postcssOptions: require('./configs/postcss.config.js'), sourceMap: isDev, }, }, { loader: 'sass-loader', options: { sourceMap: isDev, sassOptions: { outputStyle: isDev ? 'expanded' : 'compressed', quietDeps: true, // Suppress deprecation warnings from dependencies }, }, }, ], }, { test: /\.svg$/i, use: [ { loader: 'svg-sprite-loader', options: { extract: true, spriteFilename: 'assets/iconset.svg', plainSprite: true, }, }, { loader: 'svgo-loader', options: { plugins: [ { name: 'preset-default', params: { overrides: { removeViewBox: false, }, }, }, ], }, }, ], }, { test: /\.(png|jpe?g|gif|webp|avif)$/i, type: 'asset/resource', generator: { filename: 'assets/img/[name][ext]', }, }, { test: /\.(woff|woff2|eot|ttf|otf)$/i, type: 'asset/resource', generator: { filename: 'assets/fonts/[name][ext]', }, }, { test: /\.(mp4|webm|ogg|mp3|wav|flac|aac)$/i, type: 'asset/resource', generator: { filename: 'assets/media/[name][ext]', }, }, ];