Webpack компилирует scss в css и минимизирует

Я новичок в веб-пакете, и я изо всех сил пытаюсь преобразовать scss в css, а затем минимизировать.

Структура файла

 ?public
     ┣ ?dist
     ┃ ┣ ?css
     ┃ ┗ ?js
     ┃ ┃ ┗ ?adminMain.js
     ┣ ?src
     ┃ ┣ ?css
     ┃ ┃ ┃ ┣ ?admin.css
     ┃ ┃ ┃ ┣ ?admin.css.map
     ┃ ┃ ┃ ┣ ?admin.scss
     ┃ ┃ ┃ ┣ ?main.css
     ┃ ┃ ┃ ┣ ?main.css.map
     ┃ ┃ ┃ ┗ ?main.scss
     ┃ ┗ ?js
     ┃ ┃ ┗ ?adminMain.js

Я компилирую js так

"dev": "webpack --mode development ./public/src/js/adminMain.js --output ./public/dist/js/adminMain.js",
"build": "webpack --mode production ./public/src/js/adminMain.js --output ./public/dist/js/adminMain.js"

Я нашел что-то вроде sass-loader, но не могу заставить его работать.

webpack.config.js

module.exports = {
    module: {
        rules: [{
            test: /\.scss$/,
            use: [{
                loader: "sass-loader",
                options: {
                    minimize: true
                }
            }]
        }]
    }
};

я не знаю, где указать путь к включенному файлу и где указать путь к выходу.

Буду благодарен за любой совет.

Покажите свой webpack.config.js, что вы уже пробовали? В чем проблема с использованием sass-loader?

GProst 28.07.2019 13:13

@GProst Спасибо за ваш комментарий. Добавлено в исходный пост.

user9817924 28.07.2019 13:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
15
2
27 255
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать мою конфигурацию, чтобы сделать это. Я использую оптимизировать-css-активы-webpack-плагин

Вы можете просмотреть мой полный конфиг здесь

const path = require("path");
const webpack = require("webpack");
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
const CompressionPlugin = require("compression-webpack-plugin");
const UglifyJsPlugin = require("uglifyjs-webpack-plugin");
const WebpackShellPlugin = require('webpack-shell-plugin');
const OptimizeCSSAssetsPlugin = require("optimize-css-assets-webpack-plugin");

process.traceDeprecation = true;

module.exports = {
    output: {
        path: path.resolve(__dirname, "wwwroot/dist"),
        filename: "[name].js",
        publicPath: "/dist/"
    },
    optimization: {
        minimizer: [
            new UglifyJsPlugin({
                cache: true,
                parallel: true,
                sourceMap: false,
                extractComments: 'all',
                uglifyOptions: {
                    compress: true,
                    output: null
                }
            }),
            new OptimizeCSSAssetsPlugin({
                cssProcessorOptions: {
                    safe: true,
                    discardComments: {
                        removeAll: true,
                    },
                },
            })
        ]
    },
    plugins: [
        new webpack.ContextReplacementPlugin(/\./locale$/, 'empty-module', false, /jsx$/),
        new webpack.LoaderOptionsPlugin({
            options: {}
        }),
        new MiniCssExtractPlugin({
            filename: "[name].css",
            chunkFilename: "[id].css"
        }),
        new webpack.ProvidePlugin({
            $: "jquery",
            jQuery: "jquery",
            Popper: ['popper.js', 'default']
        }),
        new CompressionPlugin({
            test: /\.(js|css)/
        }),
        new UglifyJsPlugin(),
        new WebpackShellPlugin({
            onBuildStart: ['echo "Starting postcss command"'],
            onBuildEnd: ['postcss --dir wwwroot/dist wwwroot/dist/*.css']
        })
    ],
    resolve: {
        modules: [
            path.resolve('./React/js/App'),
            path.resolve('./React/js/App/Modules/Client'),
            path.resolve('./React/js/App/Modules/Adnmin'),
            path.resolve('./node_modules')
        ]
    },
    module: {
        rules: [{
                test: /\.scss$/,
                use: [
                    'style-loader',
                    MiniCssExtractPlugin.loader,
                    {
                        loader: "css-loader",
                        options: {
                            minimize: true,
                            sourceMap: true
                        }
                    },
                    {
                        loader: "sass-loader"
                    }
                ]
            }
        ]
    }
};

Но я бы рекомендовал вам использовать postcss для минимизации css. Я использую WebpackShellPlugin для запуска команды minify.

Ответ принят как подходящий

Если вы просто хотите иметь возможность импортировать файлы .scss из ваших модулей Javascript и напрямую применять их к DOM, вы можете сначала просто следовать этой документации:

https://webpack.js.org/loaders/sass-loader/

а затем добавьте Postcss к смеси:

https://github.com/postcss/postcss-загрузчик

тлдр;

npm install sass-loader node-sass style-loader css-loader postcss-loader cssnano --save-dev
// webpack.config.js
module.exports = {
  module: {
    rules: [
      {
        test: /\.scss$/,
        use: [
          'style-loader', // creates style nodes from JS strings
          {
            loader: 'css-loader', // translates CSS into CommonJS
            options: {
              importLoaders: 1
            }
          },
          'postcss-loader', // post process the compiled CSS
          'sass-loader' // compiles Sass to CSS, using Node Sass by default
        ]
      }
    ]
  }
};
// postcss.config.js
module.exports = {
  plugins: {
    'cssnano': {}
  }
};

Если вы хотите извлечь скомпилированный CSS в отдельный файл, есть:

https://github.com/webpack-contrib/mini-css-extract-plugin

Особенно:

https://github.com/webpack-contrib/mini-css-extract-plugin#advanced-configuration-example

Это так же, как моя рекомендация

Tony Ngo 29.07.2019 08:58

Другие вопросы по теме