Есть сборка на webpack + pug.
Конфиг:
const path = require('path'),
HtmlWebpackPlugin = require('html-webpack-plugin'),
FileManagerPlugin = require('filemanager-webpack-plugin'),
MiniCssExtractPlugin = require('mini-css-extract-plugin'),
CssMinimizerPlugin = require("css-minimizer-webpack-plugin"),
// ImageMinimizerPlugin = require('image-minimizer-webpack-plugin'),
TerserPlugin = require("terser-webpack-plugin"),
isProd = process.env.npm_lifecycle_event !== 'dev',
needContentHash = false,
baseLibs = ['device', 'hystmodal'],
includeHtml = pages => {
return pages.map(page => {
return new HtmlWebpackPlugin({
template: path.join(__dirname, page.path),
filename: `${page?.folder ? `${page.folder}/` : ''}${page.name}.html`,
chunks: ['main', ...baseLibs, ...page.chunk],
inject: true,
minify: false,
})
})
},
pages = [
{
name: 'index',
path: 'dev/pages/index/index.pug',
chunk: ['index'],
},
],
localPath = {
localLibs: 'dev/assets/scripts/local-libs',
scripts: 'dev/assets/scripts',
pages: 'dev/pages'
}
module.exports = {
mode: isProd ? 'production' : 'development',
entry: {
device: path.join(__dirname, localPath.localLibs, 'device.min.js'),
hystmodal: path.join(__dirname, localPath.localLibs, 'hystmodal.min.js'),
main: path.join(__dirname, localPath.scripts, 'main.js'),
index: path.join(__dirname, localPath.pages, 'index', 'index.js'),
},
output: {
path: path.join(__dirname, 'build'),
filename: path.join('assets', 'scripts', `${ needContentHash ? '[name].[contenthash].js' : '[name].js' }`),
hashFunction: `sha256`,
},
resolve: {
alias: {
'@': path.join(__dirname, './dev'),
},
useSyncFileSystemCalls: true,
},
module: {
rules: [
{
test: /\.js$/,
use: 'babel-loader',
exclude: /node_modules/,
},
{
test: /\.pug$/,
loader: 'pug-loader',
options: {
root: path.resolve(__dirname, './dev'),
minimize: false,
pretty: true,
},
},
{
test: /\.(scss|css)$/,
use: [
MiniCssExtractPlugin.loader,
'css-loader',
'postcss-loader',
'sass-loader',
],
},
{
test: /\.(png|jpg|jpeg|gif)$/i,
type: 'asset/resource',
generator: {
filename: path.join('assets', 'images', `${ needContentHash ? '[name].[contenthash][ext]' : '[name][ext]' }`),
},
},
{
test: /\.(mp4|webm)$/i,
type: 'asset/resource',
generator: {
filename: path.join('assets', 'video', `${ needContentHash ? '[name].[contenthash][ext]' : '[name][ext]' }`),
},
},
{
test: /\.svg$/,
type: 'asset/resource',
generator: {
filename: path.join('assets', 'icons', `${ needContentHash ? '[name].[contenthash][ext]' : '[name][ext]' }`,),
},
},
{
test: /\.(woff2?|eot|ttf|otf)$/i,
type: 'asset/resource',
generator: {
filename: `assets/fonts/${ needContentHash ? '[name].[contenthash][ext]' : '[name][ext]' }`,
},
},
],
},
plugins: [
...includeHtml(pages),
new FileManagerPlugin({
events: {
onStart: {
delete: ['build'],
},
onEnd: {
copy: [
{
source: path.join('dev', 'public'),
destination: 'build/public',
},
],
},
},
}),
new MiniCssExtractPlugin({
filename: path.join('assets', 'styles', `${ needContentHash ? '[name].[contenthash].css' : '[name].css' }`),
}),
],
devServer: {
watchFiles: path.join(__dirname, 'dev'),
port: 9000,
static: [
path.join(__dirname, 'dev', 'public'),
path.join(__dirname, 'build'),
]
},
optimization: {
minimizer: [
new CssMinimizerPlugin(),
new TerserPlugin(),
// new ImageMinimizerPlugin({
// minimizer: {
// implementation: ImageMinimizerPlugin.imageminMinify,
// options: {
// plugins: [
// ['gifsicle', { interlaced: true }],
// ['jpegtran', { progressive: true }],
// ['optipng', { optimizationLevel: 5 }],
// ['svgo', { name: 'preset-default' }],
// ],
// },
// },
// }),
],
},
}
При запуске сборки (npm run serve) - запускается она за 70-80 сек. Это ок, я не жалуюсь.
Но когда сборка запущена и я начинаю делать изменения в pug файле - обновление сборки от 58 до 62 сек.
Это началось буквально сегодня, до этого дня сборка обновлялась также как с стили со скриптами
Примечательно, что js и scss обновляется за 1-2 сек, очень шустро
Также примечательно, что на проекте еще работает помимо меня 2 человека, естественно с этой сборкой. У них такой проблемы нет, pug файлы обновляются быстро, также как стили и скрипты.
Что можно сделать? Если что i5, 16 гб ОЗУ. Не топ, но для фронта должно хватать. И всегда хватало. Но не думаю, что дело в железе.