【问题标题】:Config antd with react and webpack用 react 和 webpack 配置 antd
【发布时间】:2019-07-30 08:24:14
【问题描述】:

这是我收到的错误:

    Uncaught Error: Module parse failed: Unexpected token (15:5)
You may need an appropriate loader to handle this file type.
| /* stylelint-disable at-rule-no-unknown */
| html,
> body {
|   width: 100%;
|   height: 100%;
    at eval (antd.css:1)
    at Object../node_modules/antd/dist/antd.css (index.js:228)
    at __webpack_require__ (index.js:20)
    at eval (App.js:10)
    at Module../KQShopping/frontend/src/App.js (index.js:97)
    at __webpack_require__ (index.js:20)
    at eval (index.js:2)
    at Module../KQShopping/frontend/src/index.js (index.js:109)
    at __webpack_require__ (index.js:20)
    at index.js:84

webpack 配置文件:

    const path = require('path');
const fs  = require('fs');

const lessToJs = require('less-vars-to-js');
const themeVariables = lessToJs(fs.readFileSync(path.join(__dirname, './ant-theme-vars.less'), 'utf8'));

module.exports = {
    module: {
        rules: [
            {
                loader: 'babel-loader',
                test: /\.(js|jsx)$/,
                exclude: /node_modules/,
                options: {
                    plugins: [
                        ['import', { libraryName: "antd", style: true }]
                    ]
                },
            },
            {
                test: /\.less$/,
                use: [
                    {loader: "style-loader"},
                    {loader: "css-loader"},
                    {loader: "less-loader",
                        options: {
                            modifyVars: themeVariables
                        }
                    }
                ]
            }
        ]
    }
};

App.js:

     import React from "react";
import ReactDOM from "react-dom";
import { DatePicker, message } from "antd";
import "antd/dist/antd.css";

class App extends React.Component {
    state = {
        date: null,
    };

    handleChange = date => {
        message.info(`Selected Date: ${date ? date.format("YYYY-MM-DD") : "None"}`);
        this.setState({ date });
    };

    render() {
        const { date } = this.state;
        return (
            <div style={{ width: 400, margin: "100px auto" }}>
                <DatePicker onChange={this.handleChange} />
                <div style={{ marginTop: 20 }}>
                    Selected Date: {date ? date.format("YYYY-MM-DD") : "None"}
                </div>
            </div>
        );
    }
}

ReactDOM.render(<App />, document.getElementById("app"));

Babel 配置文件:

{
  "presets": ["@babel/preset-env", "@babel/preset-react"],
  "plugins": ["transform-class-properties", ["import", { "libraryName": "antd", "style": "true" }]]
}

我遵循了多篇教程和操作方法,但每次都遇到错误,我不知道如何解决这个错误,因为我刚刚开始学习 babel 和 webpack,经验不足。

在这个问题中,我完全遵循了这个文档https://ant.design/docs/react/getting-started,但我仍然遇到错误

【问题讨论】:

    标签: reactjs webpack babeljs babel-loader


    【解决方案1】:

    最后,我使用了 CSS,在 webpack 配置文件中添加:

    {
    use: ['style-loader', 'css-loader'],
    test: /\.css$/
    }
    

    【讨论】:

    • 你是天才。今天帮了我很多!
    【解决方案2】:

    您应该不需要在App.js 的顶部导入 antd css。我还认为 babel 插件应该在 babel 配置文件中将 style 设置为 css(这就是我们的配置文件的设置方式!)。

    [
        'import',
        {
            'libraryName': 'antd',
            'style': 'css'
        }
    ]
    

    我们的 less 加载器也将 javascriptEnabled 设置为 true:

    test: /\.less$/,
    use: [{
        loader: 'style-loader' // creates style nodes from JS strings
    },
    {
        loader: 'css-loader' // translates CSS into CommonJ
    },
    {
        loader: 'less-loader', // compiles Less to CSS
        options: {
            javascriptEnabled: true
        }
    }]
    

    【讨论】:

      猜你喜欢
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-01
      • 2019-02-23
      • 2016-06-14
      • 1970-01-01
      • 2016-12-06
      相关资源
      最近更新 更多