Два случая компиляции с Webpack, Vue.js и Sass - PullRequest
0 голосов
/ 11 сентября 2018

Я использую Webpack (v4), Sass и Vue.js (v2) в моем проекте.

В некоторых случаях я хотел бы скомпилировать sass-код в файлы .css. (Это для файлов .scss, которые упоминаются в webpack.config.js как точки входа)

В некоторых других случаях мне бы хотелось, чтобы скомпилированный код sass вставлялся в тег html. (Это для включенных в мой компонент .vue одного файла)

Возможно ли иметь оба одновременно? Как мне настроить Webpack?

Ответы [ 3 ]

0 голосов
/ 11 сентября 2018

Вы можете оставить файлы scss только для обработки веб-пакета. Вы не можете обработать их во время сборки и внедрить их в ваши отдельные компоненты, как указано здесь: «В некоторых других случаях мне бы хотелось, чтобы скомпилированный sass-код был вставлен в html-тег. (Это для включения в мой .vue отдельные компоненты файла) ".

Вы должны уйти, чтобы упаковать всю нагрузку, чтобы собрать все ваши файлы scss в css. Затем вы решаете либо извлечь их, либо оставить их в теге стиля html.

0 голосов
/ 30 октября 2018

Извините, PlayMa256 & Máté, за то, что вы так долго отвечали на ваши ответы. В конце концов я нашел решение использовать две разные конфигурации для моих двух случаев. Webpack позволяет это с помощью функции мультикомпилятора .

Итак, вот как выглядит мой webpack.config.js:

module.exports = [ // notice that we are handling an array of configurations here

    // In this first config, I manage the first of my use cases: 
    // Compilation of .scss files into .css files
    {
        name: "css",
        entry: { /* ... */ },
        output: { /* ... */ },
        /* ... */
        module: {
            rules: [
                {
                    test: /\.scss$/,
                    use: [ MiniCssExtractPlugin.loader, 'css-loader', 'postcss-loader', 'sass-loader' ],
                }
            ]
        },
        plugins: [ /* ... */]
    },

    // In this other config, I manage the other of my use cases: 
    // injection of the <style> blocks of my .vue files into the DOM
    {
        name: "main", // name for first configuration
        entry: { /* ... */ },
        output: { /* ... */ },
        /* ... */
        module: {
            rules: [
                // Vue single file components loader
                {
                    test: /\.vue$/,
                    loader: 'vue-loader',
                },

                // Injection of <style> elements into the DOM,
                // for both plain `.css` files and `<style>` blocks in `.vue` files
                {
                    test: /\.css$/,
                    use: [
                      'vue-style-loader',
                      'css-loader'
                    ]
                },

                // Compilation of sass code,
                // (This actually works both for `.css` files and `<style>` blocks in `.vue` files, 
                // but I don't have any `.css` as entry for this config.)
                {
                    test: /\.scss$/,
                    use: [
                        "style-loader", // creates style nodes from JS strings
                        "css-loader", // translates CSS into CommonJS
                        "sass-loader" // compiles Sass to CSS, using Node Sass by default
                    ]
                }
            ]
        },
        plugins: [ /* ... */]
    }
];
0 голосов
/ 11 сентября 2018

Вы можете использовать sass-loader для включения файлов scss в любом месте и их компиляции: https://github.com/webpack-contrib/sass-loader

Чтобы включить scss в один-единственный компонент, вам не нужно делать ничего конкретного, просто напишитеваши стили в теге стиля с указанием lang = "scss".

Вот подробный пример для обоих случаев: https://medium.com/hong-kong-tech/use-sass-scss-of-webpack-in-vuejs-8dde3a83611e

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