繁体   English   中英

如何在组件内部的css模块/ postcss中使用scss

[英]How to use scss with css modules / postcss inside components

我无法弄清楚如何设置我的webpack以便能够和在我的组件内部使用scss模块,例如:

import styles from './ComponentStyles.scss'

到目前为止,我尝试将webpack配置为与sass-loaderpostcss-loader一起使用,但是没有运气:

  {
    test: /\.scss$/,
    loaders: [
      'isomorphic-style-loader',
      'css-loader?modules&localIdentName=[name]_[local]_[hash:base64:3]',
      'postcss-loader',
      'scss-loader'
    ]
  }

注意由于服务器渲染的需要, isomorphic-style-loader是我使用的库,而不是style-loader ,在其github页面文档中,他们实际上使用具有.scss扩展名的postcss-loader,但在我的情况下,如果我遵循它们,则不会编译scss例。

我不得不自己动手修改,但最终落入了以下内容

package.json

"autoprefixer": "^6.3.1",
"css-loader": "^0.23.1",
"extract-text-webpack-plugin": "^1.0.1",
"node-sass": "^3.8.0",
"sass-loader": "^3.1.2",
"style-loader": "^0.13.0"

webpack配置

...
const autoprefixer = require('autoprefixer');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const autoprefixer = require('autoprefixer');
...

const config = {
    ...
    postcss: [
        autoprefixer({
            browsers: ['last 2 versions']
        })
    ],
    plugins: [
        new ExtractTextPlugin('css/bundle.css'),
    ],
    module: {
        loaders: [
            {
                test: /\.scss$/,
                loader: ExtractTextPlugin.extract('style', 'css!postcss!sass')
            }
        ]
    }
    ...
};

bootstrap.jsx

import React from 'react';
import ReactDOM from 'react-dom';
import App from './app';
import style from './scss/style.scss';

ReactDOM.render(
    <App/>,
    document.getElementById('my-app')
);

对于那些感兴趣的人:这里发生的是bootstrap.jsx是webpack的入口点,并且通过导入我们的原始scss文件(通过相对路径),我们告诉webpack在构建过程中包括它。

此外,由于我们指定一个loader该文件扩展名在我们的配置( .scss )的WebPack能够解析style.scss通过从右到左的定义装载机和运行它: sass --> post-css --> css

然后,我们使用extract-text-webpack-plugin将已编译的CSS从bundle.js ,通常将其放置在该css/bundle.css ,并将其放置在相对于我们的输出目录的位置( css/bundle.css )。

另外,在这里使用extract-text-webpack-plugin是可选的,因为它只会从bundle.js中提取CSS并将其放到一个单独的文件中,如果您使用服务器端渲染,这很好,但是我也发现它很有帮助在调试期间,由于我对scss有特定的输出位置,因此我对编译很感兴趣。

如果您希望看到实际效果,请使用以下示例: https : //github.com/mikechabot/react-boilerplate

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM