kk-webpack-base--config
Version:
Webpack config for kk-webpack-base
144 lines (142 loc) • 3.11 kB
JavaScript
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]',
},
},
];