【问题标题】:Can I import scss file uses the 'composes' statement with Webpack?我可以在 Webpack 中使用“composes”语句导入 scss 文件吗?
【发布时间】:2020-08-20 19:56:44
【问题描述】:

我现在正在学习 CSS 模块,它们看起来可以解决很多问题。但是所有的文档都是基于CSS的,我想用SASS。

这可能吗?例如,我怎样才能使以下语句起作用?

.normal {
    composes: common;
    composes: primary from "../shared/colors.scss";
 }

【问题讨论】:

    标签: css sass webpack css-modules


    【解决方案1】:

    ./scss/import.scss

    .myImportClass {
        background-color: #f00
    }
    

    ./scss/style.scss

    .btn {
        padding: 20px;
        border: 1px solid #000;
    }
    
    .newBtn {
        composes: btn;
        composes: myImportClass from './import.scss';
        border: 5px solid #f00;
    }
    

    webpack.config.js 中的模块部分

    module: {
        rules: [
            {
                test: /\.scss/,
                use: [
                    {
                        loader:'style-loader'
                    },
                    {
                        loader: 'css-loader',
                        options: {
                            sourceMap: true,
                            modules: true,
                            localIdentName: '[name]__[local]__[hash:base64:5]'
                        }
                    },
                    {
                        loader: 'sass-loader'
                    }
                ]
            }
        ]
    }
    

    你的 teststyle.js (ES6 / ES7):

    import React from 'react';
    import style from './scss/style.scss';
    
    const TestStyle = () => {
        render() {
            return (<div>
                   <button className={style.newBtn}>my button</button>
            </div>)
        }
    }
    
    default export TestStyle;
    

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>webpack CSS composes</title>
    </head>
    <body>
        <div id="app"></div>
    </body>
    </html>
    

    入口点 app.js

    import React from 'react';
    import TestStyle from './teststyle';
    
    React.render(
         <TestStyle />,
         document.getElementById('app')
    );
    

    // 更新

    • 将 webpack 配置转换为 webpack 3

    • 让 teststyle.js 成为无状态函数

    【讨论】:

    • 嘿@phil,谢谢你的回答。唯一的问题是,您正在使用“composes”语句来扩展同一文件中的 CSS 类。是否可以使用它来引用另一个 .scss 文件?例如组成:主要来自“../shared/colors.scss”;
    【解决方案2】:

    是css-loader的问题,尝试在css-loaderwebpack config中添加选项importLoaders: 1,(https://webpack.js.org/loaders/css-loader/#importloaders)

    {
        loader: "css-loader",
        options: {
          modules: true,
          importLoaders: 1,
        },
      }
    

    【讨论】:

      猜你喜欢
      • 2018-12-18
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 1970-01-01
      • 2018-11-04
      • 1970-01-01
      相关资源
      最近更新 更多