reactjs - 在 ReactJS 和 Webpack 中导入 materialdesignicons 包

标签 reactjs webpack sass

我正在尝试通过 npm“mdi”包将 Material 设计图标添加到我的项目中。但我有问题。

webpack.config.js

var webpack = require('webpack');
var path = require('path');

var BUILD_DIR = path.resolve(__dirname, 'src/public');
var APP_DIR = path.resolve(__dirname, 'src');

var config = {
  entry: [
      'webpack/hot/dev-server',
      'webpack-dev-server/client?http://localhost:8080/',
      APP_DIR + '/index.jsx'
  ],
  output: {
      path: BUILD_DIR,
      filename: 'bundle.js',
      publicPath : '/'
  },
  devServer : {
      historyApiFallback: true,
      contentBase: 'src/public/'
  },
  module: {
      loaders : [            
          {
              test : /\.jsx?/,
              include : APP_DIR,
              loader : ['react-hot-loader', 'babel-loader']
          },
          {
              test: /\.s?css$/,
              loaders: ["style-loader", "css-loader", "sass-loader"],
          },
          {
              test: /\.(eot|svg|ttf|woff|woff2)(\??\#?v=[.0-9]+)?$/,
              loader: 'file-loader?name=/fonts/[name].[ext]',
          }
      ]
  },
  plugins: [
      new webpack.optimize.OccurrenceOrderPlugin(),
      new webpack.HotModuleReplacementPlugin(),
      new webpack.NoEmitOnErrorsPlugin()
  ],
  resolve: {
      extensions: ['.js', '.jsx']
  }
};

//dev server

module.exports = config;

我的 App 组件调用主 scss 文件
import './scss/App.scss';

然后在那个 App.scss 文件中,我导入一个 settings.scss 和 materialdesignicons.scss 文件

设置.scss
$mdi-font-path: "fonts/";

应用程序.scss
@import "./settings.scss";
@import '~mdi/scss/materialdesignicons.scss';

该项目是通过 main.scss 文件导入的。

设置.scss
$mdi-font-path: "fonts/";

每当我尝试构建时,我都会在尝试弄清楚如何处理 webfont 项目时遇到错误。
ERROR in ./~/css-loader!./~/sass-loader!./src/scss/App.scss
Module not found: Error: Can't resolve './fonts//materialdesignicons-webfont.eot?v=1.9.32' in '/<path>/app/src/scss'
 @ ./~/css-loader!./~/sass-loader!./src/scss/App.scss 7:129-189
 @ ./src/scss/App.scss
 @ ./src/App.jsx
 @ ./src/index.jsx
 @ multi (webpack)-dev-server/client?http://localhost:8080 webpack/hot/dev-server webpack-dev-server/client?http://localhost:8080/ ./src/index.jsx

我认为文件加载器会处理这些文件。似乎因为它正在导入 scss 文件,所以它不使用文件加载器部分,而是尝试使用 sass/css 加载器。

我试图弄清楚这应该如何完成。

最佳答案

我的方法包括三个步骤:

  • 安装 material-design-icons 包
    npm install material-design-icons
    
  • 将 material-icons.css 文件导入 .less 或 .scss 文件/项目
    @import "~/node_modules/material-design-icons/iconfont/material-icons.css";
    
  • 将推荐的代码包含到 reactjs .js 文件/项目中
    <i className='material-icons' style={{fontSize: '36px'}}>close</i>
    
  • 关于reactjs - 在 ReactJS 和 Webpack 中导入 materialdesignicons 包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44170491/

    相关文章:

    node.js - webpack/webpack-dev-server/react 在应该显示应用程序时显示目录列表

    reactjs - 如何防止 Nivo 刻度轴文本(条形图)中的文本截断

    html - &lt;input&gt; 不能作为 <tr> 的子项出现

    javascript - 对JS对象中的解构元素进行操作

    javascript - Webpack:./~/sqlite3/~/node-pre-gyp/lib/node-pre-gyp.js 中的错误未找到模块:错误:无法解析 'file' 或 'directory' ../package

    Webpack配置: Conditionally import module

    arrays - 更新状态数组中的一个值 react 原生

    css - 如何将自定义 css 应用于 ionic 4 组件?

    javascript - 有没有办法知道用户是否使用类似于使用 col-sm 的 flexbox 的小型设备?

    javascript - 具有用于 cookieless 域的自定义 javascript 函数的 LESS CSS