首页 > 解决方案 > 为什么我应该在入口 webpack 配置中声明 scss 文件

问题描述

为什么我的 webpack 配置无法观看scss文件?如果我明确地将文件添加到entry然后它正在工作,创建 css 文件。这是一个好习惯吗?

/// <binding ProjectOpened='Watch - Development' />

"use strict";

const path = require('path');
const webpack = require('webpack');
const MiniCssExtractPlugin = require("mini-css-extract-plugin");

module.exports = {
    watch: true,
    entry: {
        app: './src/scripts/app.js',
        People: './Views/People/Index.cshtml.js',
        Service: './Views/Service/Index.cshtml.js',
        sass: './src/sass/app.scss' // <- this should explicitly stated
    },
    plugins: [
        new MiniCssExtractPlugin({
              path: path.join(__dirname, '/wwwroot/css/'),
              filename:  'app.css',
        })
    ],
    output: {
        publicPath: "/js/",
        path: path.join(__dirname, '/wwwroot/js/'),
        filename: '[name].bundle.js'
    },
    module: {
        rules: [
            {
                test: /\.js$/,
                loader: 'babel-loader',
                exclude: /(node_modules)/,
                query: {
                    presets: ['es2015']
                }
            },
            {
                test: /\.ts$/,
                exclude: /node_modules|vue\/src/,
                loader: "ts-loader",
                options: {
                    appendTsSuffixTo: [/\.vue$/]
                }
            },
            {
                test: /\.(sa|sc|c)ss$/,
                use: [
                MiniCssExtractPlugin.loader,
                    { loader: 'css-loader', options: { url: false, sourceMap: true } },
                    { loader: 'sass-loader', options: { sourceMap: true } }
                ]
            },
            {
                test: /\.(png|jpg|gif)$/,
                use: {
                    loader: 'url-loader',
                    options: {
                        limit: 8192
                    }
                }
            },
            {
                test: /\.vue$/,
                loader: 'vue-loader',
            }
        ]
    },
    resolve: {
        alias: {
            vue: 'vue/dist/vue.js'
        },
        extensions: ['.js', '.vue']
    }
};

标签: webpacksassconfigwebpack-style-loaderextracttextwebpackplugin

解决方案


Webpack 的 watcher 对scss文件没有任何怨恨。

Webpackdependency graph从 中提到的所有文件开始制作entry files,然后是imported这些文件中的所有文件,然后imports是下一级的所有文件......

Webpack watch仅跟踪上述依赖关系图中的文件。

现在,您必须将文件导入依赖关系图中的任何文件中。

如果您scss没有被依赖图中的任何文件导入,那么您必须将其添加为,new entry file或者您可以使用您正在使用的 IDE 的任何插件来监视scss文件并在更改时编译它们css


推荐阅读