Webpack 4: перекомпиляция scss занимает более 3 секунд - PullRequest
0 голосов
/ 04 мая 2018

Запуск webpack-dev-server с горячей перезагрузкой, каждый раз, когда я меняю файл scss, перекомпиляция занимает более 3 секунд, в то время как js / html перекомпилируется менее чем за 1 секунду. Я не мог понять, почему.

Вот мой конфиг:

webpack.common.js

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const CleanWebpackPlugin = require("clean-webpack-plugin");
const CopyWebpackPlugin = require("copy-webpack-plugin");

module.exports = {
    entry: {
        index: "./webpack.entry.js",
        style: "./app/scss/main/app.scss"
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                use: {
                    loader: "babel-loader",
                    options: {
                        presets: ["@babel/preset-env"],
                        cacheDirectory: true
                    }
                }
            }
        ]
    },
    plugins: [
        new CleanWebpackPlugin(["dist"]),
        new HtmlWebpackPlugin({
            template: "./app/html/index.html"
        })
    ],
    output: {
        path: path.resolve(__dirname, "dist")
    }
};

webpack.dev.js

const webpack = require("webpack");
const merge = require("webpack-merge");
const common = require("./webpack.common.js");

module.exports = merge(common, {
    devtool: "cheap-module-eval-source-map",
    devServer: {
        contentBase: "./dist",
        port: 9000,
        hot: true
    },
    module: {
        rules: [
            {
                test: /\.scss$/,
                use: [
                    {
                        loader: "style-loader"
                    },
                    {
                        loader: "css-loader",
                        options: {
                            sourceMap: true,
                            url: false
                        }
                    },
                    {
                        loader: "sass-loader",
                        options: {
                            sourceMap: true
                        }
                    }
                ]
            }
        ]
    },
    plugins: [new webpack.HotModuleReplacementPlugin()],
    output: {
        filename: "[name].js"
    },
    mode: "development"
});

app.scss - это группа импорта scss, которая может привести к другой группе импорта scss.

@import "../base";
@import "../layout";
@import "../modules";
@import "../state";
@import "../3rdparty";

/* components */
@import "../../component/footer/footer";
@import "../../component/switcher/switcher";
@import "../../component/header/header";
@import "../../component/dropdown/dropdown";
@import "../../component/lgntabset/lgntabset";
@import "../../component/lgnprogressstep/lgnprogressstep";
@import "../../component/lgnwizard/lgnwizard";
@import "../../component/lgnslider/lgnslider";
@import "../../component/lgndropdown/lgndropdown";
@import "../../component/lgnmodal/lgnmodal";
@import "../../component/calendar/weeklycalendar/calendarwidget";

Как мне улучшить время перекомпиляции scss?

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

В итоге я сделал что-то похожее на create-react-app setup :

  1. Запуск node-sass-chokidar --watch в виде отдельного процесса, который будет генерировать CSS-файлы каждый раз, когда я изменяю SCSS-файлы.

  2. В конфигурации JS и Webpack ссылка на сгенерированные файлы CSS.

Это уменьшает время перекомпиляции до ~ 1 секунды, что лучше, чем fast-sass-loader (~ 2 секунды).

UPDATE:

Если вам не нужно разрешать URL() и @import, просто используйте raw-loader, что уменьшает мою повторную компиляцию примерно до 0,5 секунды!

0 голосов
/ 04 мая 2018

К сожалению, это известная проблема: https://github.com/webpack-contrib/sass-loader/issues/296,, и вы мало что можете сделать. Ваша конфигурация верна.

Существует альтернатива https://github.com/yibn2008/fast-sass-loader,, которая утверждает, что в 5 ~ 10 раз быстрее. У меня нет никакого опыта с этим, но возможно стоит попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...