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

时间:2016-06-24 22:19:48

标签: javascript reactjs webpack postcss css-modules

我没有弄清楚如何设置我的webpack以便能够在我的组件中使用scss模块,如:

import styles from './ComponentStyles.scss'

到目前为止,我尝试将webpack配置为与sass-loader一起使用postcss-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不是如果我按照他们的例子编译。

1 个答案:

答案 0 :(得分:2)

我不得不自己做一些修补,但最终还是落在了以下

<强>的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 config

...
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)。 / p>

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

如果您希望看到这一点,请点击此处使用它的小样板:https://github.com/mikechabot/react-boilerplate