sass-loader 不适用于 webpack + react + grommet

Posted

技术标签:

【中文标题】sass-loader 不适用于 webpack + react + grommet【英文标题】:sass-loader not working with webpack + react + grommet 【发布时间】:2017-06-20 16:05:41 【问题描述】:

我正在尝试开始使用 webpack 和 Grommet 一起工作。我正在关注本教程:https://github.com/grommet/grommet-standalone 但我收到以下错误:

ERROR in ./src/app/index.js
Module not found: Error: Can't resolve 'grommet/scss/vanilla/index' in '/home/john/Development/Work/Utilities/react_practice/test_app/src/app'
 @ ./src/app/index.js 31:0-37
 @ multi library

显然它在源目录中寻找 scss 文件而不是 node_modules - 但我不知道是什么导致了错误或如何修复它。

我正在使用这个 sass 加载程序:https://github.com/jtangelder/sass-loader

我正在使用 webpack 2.10,因为:https://***.com/a/39608145/1596288

另外,这些是我的 webpack.config.babel.js 和 index.js 文件:

import webpack from 'webpack';

module.exports = 
    entry: 
        library: './src/app/index.js',
    ,

    output: 
        library: 'bundle',
        libraryTarget: 'umd',
        filename: 'bundle.js',
        path: './public/dist'
    ,

    devServer : 
        inline: true,
        contentBase: './public',
        port: 8100
    ,

    module: 
        loaders: [
            
                test: /\.jsx?$/,
                loader: 'babel-loader',
                exclude: /node_modules/,
                query: 
                    presets: ['es2015', 'react']
                
            ,

            
                test: /\.scss$/,
                loader: 'style!css!sass?outputStyle=compressed'
            
        ]
    ,

    sassLoader: 
        sourceMap: true,
        includePaths: [
            './node_modules',
            './node_modules/grommet/node_modules'
        ]
    

和...

import Header from 'grommet/components/Header';
import Title from 'grommet/components/Title';
import Box from 'grommet/components/Box';
import Search from 'grommet/components/Search';
import Menu from 'grommet/components/Menu';
import Anchor from 'grommet/components/Anchor';
import Actions from 'grommet/components/icons/base/Actions'

import 'grommet/scss/vanilla/index';

import React from 'react'
import  render  from 'react-dom'

const TesterComponent = () => (
   <Header>
        <Title>
            Sample Title
        </Title>

        <Box flex=true
        justify='end'
        direction='row'
        responsive=false>
            <Search inline=true
            fill=true
            size='medium'
            placeHolder='Search'
            dropAlign="right": "right" />

            <Menu icon=<Actions />
            dropAlign="right": "right">
                <Anchor href='#'
                    className='active'>
                    First
                </Anchor>
                <Anchor href='#'>
                    Second
                </Anchor>
                <Anchor href='#'>
                    Third
                </Anchor>
            </Menu>
        </Box>
    </Header>
)


render (
    <TesterComponent />,
    document.getElementById('root')
)

【问题讨论】:

【参考方案1】:

试试这个


        test: /\.scss$/,
        loader: ExtractTextPlugin.extract('style-loader', "css-loader!postcss-loader!sass-loader")
      ,

【讨论】:

【参考方案2】:

通过首先将我的 webpack.config.babel.js 修改为以下内容来解决问题:

import webpack from 'webpack';

module.exports = 
entry: 
    library: './src/app/index.js',
,

output: 
    library: 'bundle',
    libraryTarget: 'umd',
    filename: 'bundle.js',
    path: './public/dist'
,

devServer : 
    inline: true,
    contentBase: './public',
    port: 8100
,

resolve: 
    extensions: ['', '.js', '.scss', '.css']
,

module: 
    loaders: [
        
            test: /\.jsx?$/,
            loader: 'babel-loader',
            exclude: /node_modules/,
            query: 
                presets: ['es2015', 'react']
            
        ,

        
            test: /\.scss$/,
            loader: 'style-loader!css-loader!sass-loader?outputStyle=compressed'
        
    ]
,

sassLoader: 
    includePaths: [
        './node_modules',
        './node_modules/grommet/node_modules'
    ]

确保您也安装了以下库:

sudo npm install style-loader --save-dev
sudo npm install css-loader --save-dev
sudo npm install sass-loader --save-dev

【讨论】:

以上是关于sass-loader 不适用于 webpack + react + grommet的主要内容,如果未能解决你的问题,请参考以下文章

带有 Webpack 的 sass-loader 不会生成 CSS

Webpack 和 sass-loader 文件导入顺序

css-loader,sass-loader 不工作 webpack 2

带有 webpack 和 sass-loader 的 Susy 网格

Webpack 中带有 sass-loader 和 postcss-loader 的 sourceMap

源地图不适用于 Webpack