React-boilerplate+grommet,让 sass 和 webpack 一起工作

Posted

技术标签:

【中文标题】React-boilerplate+grommet,让 sass 和 webpack 一起工作【英文标题】:React-boilerplate+grommet, making sass work with webpack 【发布时间】:2017-02-10 17:49:03 【问题描述】:

我在 Python 和 Flask 方面拥有超过 10 年的经验,主要专注于后端和很少的 html + javascript,但零 CSS。大约 6 周前,我开始使用 React 和 JavaScript,并使用不需要太多样式的 react 制作了简单的应用程序。但是,现在我需要使用索环进行样式设计,使用 React 做一个体面的项目。

我从 react-boilerplate1 开始。阅读react-boilerplate scss docs 和 //github.com/grommet/grommet-standalone 自述文件后,我的理解是,我需要更改 webpack 配置以使 scss 加载程序正常工作。

我的环境是 win8.1 x64,节点 6.4.0

这是我所做的更改。

    同时安装了sass-loadernode-sass

    internals\webpack\webpack.dev.babel.js 中更改

cssLoaders: 'style-loader!css-loader?localIdentName=[local]__[path][name]__[hash:base64:5]&modules&importLoaders=1&sourceMap!postcss-loader',

cssLoaders: 'style-loader!css-loader?localIdentName=[local]__[path][name]__[hash:base64:5]&modules&importLoaders=1&sourceMap!postcss-loader!sass-loader',

根据 //github.com/mxstbr/react-boilerplate/blob/master/docs/css/sass.md 注意额外的 !sass-loader

    将以下内容添加到internals\webpack\webpack.base.babel.js

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

@第 40 行就在 css 块下方,并且

sassLoader: 
  includePaths: [
    './node_modules',
    // this is required only for NPM < 3.
    // Dependencies are flat in NPM 3+ so pointing to
    // the internal grommet/node_modules folder is not needed
    './node_modules/grommet/node_modules'
  ]

@line 62[ 第 58 行,如果您在 master 分支中查看 @github 源代码 //github.com/mxstbr/react-boilerplate/blob/master/internals/webpack/webpack.base.babel.js, +4是因为为 scss 块添加了 4 行]

    在同一文件中将'.scss' 添加到resolve.extenstions 数组中。

    现在,在这些更改之后,我运行 npm start 并将以下行添加到 app\containers\App\index.jsNow 在这些更改之后,我运行 npm start 并将以下行添加到 app\containers\App\index.js

    import 'grommet/scss/vanilla/index';

根据此处的文档 //github.com/grommet/grommet-standalone

在 cmd.exe 控制台中出现以下错误

ERROR in ./app/containers/App/index.js
Module not found: Error: Can't resolve 'grommet/scss/vanilla/index' in 'C:\Users\coder\frontend\app\containers\App'
 @ ./app/containers/App/index.js 57:0-36
 @ ./app/app.js
 @ multi main
Child html-webpack-plugin for "index.html":

不用说已经安装了索环,并且文件存在于带有 scss 扩展的所需位置。我当然可以将扩展名导入为import 'grommet/scss/vanilla/index.scss 然后我收到以下错误

ERROR in ./~/css-loader!./~/style-loader!./~/css-loader!./~/sass-loader?outputStyle=compressed!./~/grommet/scss/vanilla/index.scss Module build failed: Unknown word (5:1)

  3 | // load the styles   4 | var content = require("!!./../../../css-loader/index.js!./../../../sass-loader/index.js?outputStyle=compressed!./index.scss");
> 5 | if(typeof content === 'string') content = [[module.id, content, '']];
    | ^   6 | // add the styles to the DOM   7 | var update = require("!./../../../style-loader/addStyles.js")(content, );   8 | if(content.locals) module.exports = content.locals;

 @ ./~/grommet/scss/vanilla/index.scss 4:14-189 13:2-17:4 14:20-195

我在这里遗漏了什么非常明显的东西吗?看起来好像 scss 加载程序不工作。如果您已成功使用带有 react-boilerplate 的垫圈,请发布您所做的更改。

PS:Stack Overflow 通知我不能发布两个以上的链接,所以我修改了链接以省略 https: 从 url,请手动添加。

【问题讨论】:

【参考方案1】:

在您的“webpack.config.json”文件中添加以下内容,这是从用于独立安装的索环文档中提取的,我的如下:

// Development rules
rules.push(

  test: /\.scss$/,
  exclude: /node_modules/,
  use: [
    
      loader: 'style-loader'
    ,
    
      loader: 'css-loader'
    ,
    
      loader: 'sass-loader', options: 
        sourceMap:true,
        includePaths: ['./node_modules', './node_modules/grommet/node_modules']
      
            
  ],

);

关注 转到您的主要 sass 文件。我的名为“app.scss”,位于主“scss”文件夹内,我有以下代码:

@import '~grommet/scss/aruba/index'; // or @import '~grommet/scss/vanilla/index'; any grommet theme
@import "base/normalize";
@import "base/breakpoints";
@import "base/app";

现在 grommet sass 应该可用于整个项目,请注意,您可以在此处更改您喜欢的 Grommet 主题。

【讨论】:

【参考方案2】:

要运行索环内置样式(主题),您无需安装 sass-loader 或 node-sass,直到您想使用 scss 自定义其样式。

由于您已经安装了 grommet 包,它在节点模块本身内包含受支持主题的缩小 css,您可以直接使用它来导入您的应用程序。

要解决您的问题,您只需将以下导入添加到您的 index.js 文件中,该文件将为您提供默认的索环样式

import 'grommet/grommet.min.css';

它是一个缩小的 css 文件,因此您不需要处理来自扣眼的 scss 文件。这将作为一个简单的 css 文件工作。

除此之外,您还可以从索环中选择不同的可用主题。缩小的 css 也可用于此主题。 以下是这些 css 的列表:

    grommet.min.css 索环-hpinc.min.css grommet-hpe.min.css 索环-aruba.min.css

【讨论】:

以上是关于React-boilerplate+grommet,让 sass 和 webpack 一起工作的主要内容,如果未能解决你的问题,请参考以下文章

打破 Grommet 样式组件样式的全局样式

无法正确设置 react-boilerplate:“npm ERR!ngrok - 不支持平台 darwinarm64。”

React-Boilerplate在没有端口的情况下运行生产

使用 React 路由器 v4 在 react-boilerplate 中加载异步减速器和 sagas

刷新反应应用程序,404 错误。反应路由器问题

注入 asyncReducers 时的 preloadedState