使用 webpack 加载 scss 失败

Posted

技术标签:

【中文标题】使用 webpack 加载 scss 失败【英文标题】:Failed to load scss with webpack 【发布时间】:2017-01-16 05:31:47 【问题描述】:

我正在使用 webpack,我想在我的 javascript 中加载 scss 文件。 (或者如果可以分开,也可以)。

这是我的 webpack 配置:

"use strict";
const CopyWebpackPlugin = require('copy-webpack-plugin');
const path = require('path');

module.exports = 
    context: __dirname + '/src',
    entry: './js/index.js',
    output: 
        path: './build',
        filename: 'js/app.bundle.js'
    ,
    module: 
        loaders: [
            
                test: /\.js$/,
                exclude: /node_modules/,
                loader: 'babel-loader'
            ,
            
                test: /\.scss$/,
                loaders: ["style", "css", "sass"]
            
        ]
    ,
    resolve: 
        root: [
            path.resolve('./src/js'),
            path.resolve('./src/scss')
        ],
        extensions: ['', '.js']
    ,
    plugins: [
        new CopyWebpackPlugin([
             from: 'html/**', to: `$__dirname/build/html`, flatten: true ,
             from: 'images/**', to: `$__dirname/build/image`, flatten: true 
        ])
    ]
;

这是我的文件列表:

src/html/index.html -> build/html/index.html(已工作) src/images/** -> build/images/**(已工作) src/js/index.js -> build/js/app.bundle.js(已工作) src/scss/** -> build/css/** (不工作)

这是我的 JavaScript 代码。我刚开始项目,所以代码不多:

import "babel-polyfill";
import React from 'react';
import ReactDOM from 'react-dom';
import moduleA from 'moduleA';
import "view/startup.scss";

ReactDOM.render(
    <div>
        <h1>Helloworld!</h1>
    </div>,
    document.getElementById('entry')
);

你可以看到:import "view/startup.scss"; 我想将 scss 文件加载到我的 JavaScript 中,但是当我运行 webpack 命令时,它说:

Loader /Users/.../Desktop/work/my-project/app/node_modules/css/index.js 中的错误没有返回函数 @ ./scss/view/startup.scss 4:14-123

在webpack配置的“resolve”属性中,你可以看到我为scss添加了另一个根目录,我也加载了sass-loader,但是它不起作用,我不知道为什么。

据我所知,使用 Webpack,包括 css/scss 会自动注入到目标文件中,因此不需要将其提取为单独的文件,我只希望它可以工作。

任何帮助将不胜感激:)

* 已更新 * ./scss/view/startup.scss的代码

#startup 
    background-color: #7087d7;

【问题讨论】:

./scss/view/startup.scss 中有什么内容? @Nobert 只是普通的 scss 代码。我需要写吗? @Nobert 问题已更新 :) 【参考方案1】:

错误指向原因(我突出显示了相关部分):

Loader /Users/.../Desktop/work/my-project/app/node_modules/css/index.js 中的错误没有返回函数 @ ./scss/view/启动.scss 4:14-123

当你在 Webpack 中声明一个加载器时,你可以去掉-loader 后缀(所以css-loader 变成了css前提是你没有其他可能匹配无​​后缀加载器名称的模块。

在您的情况下,这是失败的地方,因为您还使用了 css 包,Webpack 尝试将其用作加载器(失败,因为它不是)。

要解决此问题,请使用完整的加载程序包名称:

 loaders : [ "style-loader", "css-loader", "sass-loader" ]

【讨论】:

谢谢罗伯特克莱普!你救了我的命! :)

以上是关于使用 webpack 加载 scss 失败的主要内容,如果未能解决你的问题,请参考以下文章

页面加载前的Webpack SCSS“闪烁”

webpack 错误:找不到要导入的文件或无法读取:波旁威士忌,如何解决?

Webpack:没有加载器来处理 SCSS 是输入存在

Webpack SASS 加载器无法对常见的 SCSS 导入进行重复数据删除

Glide终于解决了同时加载webp格式图片的问题

关于SDWebImage加载webp格式图片异常问题