【问题标题】:Webpack 4.28.4 module unable to parse JSXWebpack 4.28.4 模块无法解析 JSX
【发布时间】:2019-11-15 12:32:21
【问题描述】:

运行“npm run webpack-dev-server --mode=developement”时出现以下错误

ERROR in ./src/index.js 6:2
Module parse failed: Unexpected token (6:2)
You may need an appropriate loader to handle this file type.
|
| ReactDOM.render(
>   <App />,
|   document.getElementById('root')
| );
ℹ 「wdm」: Failed to compile.

我已经安装了 webpack@4.28.4,你可以在下面看到 package.json、webpack.server.js 和 index.js 文件。

我尝试过使用 webpack.server.js 和 .babelrc,但不幸的是现在运气不错。

package.json:

{
  "name": "react-ssr",
  "version": "1.0.0",
  "description": "React Server Side Rendering",
  "main": "index.js",
  "scripts": {
    "webpack-dev-server": "webpack-dev-server",
    "dev": "webpack-dev-server --port 3001 --mode=development",
    "prod": "webpack --mode=production"
  },
  "author": "Dakota Ruller",
  "license": "ISC",
  "dependencies": {
    "body-parser": "^1.19.0",
    "express": "^4.17.1",
    "nodemon": "^1.19.1",
    "react": "^16.8.6",
    "react-dom": "^16.8.6",
    "react-router": "^5.0.1",
    "react-router-dom": "^5.0.1"
  },
  "devDependencies": {
    "@babel/core": "^7.4.5",
    "@babel/plugin-proposal-class-properties": "^7.4.4",
    "@babel/preset-env": "^7.4.5",
    "@babel/preset-react": "^7.0.0",
    "babel-loader": "^8.0.6",
    "css-loader": "^3.0.0",
    "file-loader": "^4.0.0",
    "html-webpack-plugin": "^3.2.0",
    "path": "^0.12.7",
    "style-loader": "^0.23.1",
    "webpack": "^4.28.4",
    "webpack-cli": "^3.3.5",
    "webpack-dev-server": "^3.7.2",
    "webpack-node-externals": "^1.7.2"
  }
}

.babelrc:

{
  "presets": [
    [ "@babel/preset-env", {
      "modules": false,
      "targets": {
        "browsers": [
          "last 2 Chrome versions",
          "last 2 Firefox versions",
          "last 2 Safari versions",
          "last 2 iOS versions",
          "last 1 Android version",
          "last 1 ChromeAndroid version",
          "ie 11"
          ]
        }
      }
    ],
    [
      "@babel/preset-react",
      {
        "pragma": "dom",
        "pragmaFrag": "DomFrag",
        "throwIfNamespace": false
      }
    ]
  ],
  "plugins": [ "@babel/plugin-proposal-class-properties" ]
}

webpack.server.js:

const HtmlWebPackPlugin = require( 'html-webpack-plugin' );
const path = require( 'path' );

module.exports = {
  context: __dirname,
  entry: './src/index.js',
  output: {
    path: path.resolve( __dirname, 'dist' ),
    filename: 'bundle.js',
    publicPath: '/',
  },
  devServer: {
    historyApiFallback: true
  },
  module: {
    rules: [
      {
        test: /\.js?$/,
        exclude: /node_modules/,
        loader: 'babel-loader'
      },
      {
        test: /\.css?$/,
        use: [ 'style-loader', 'css-loader' ]
      },
      {
        test: /\.(png|j?g|svg|gif)?$/,
        use: 'file-loader'
      }
    ]
  },
  plugins: [
    new HtmlWebPackPlugin({
      template: path.resolve( __dirname, 'public/index.html' ),
      filename: 'index.html'
    })
  ]
};

index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';

ReactDOM.render(
  <App />,
  document.getElementById('root')
);

【问题讨论】:

  • 我在你的 package.json 中没有看到 file-loader 和 css-loader。
  • 我的错误我刚刚安装了它们,但安装后仍然存在。
  • 实际上还有样式加载器。 编辑哦,我的错误它被添加了。
  • 你确定 pragma 和 pragmaFrag 吗?
  • 我根据 babel 文档添加了这些,但并没有以任何方式改变错误。我还没有把它们拿出来。

标签: reactjs webpack jsx webpack-dev-server


【解决方案1】:

我猜它应该是webpack.config.js,除非你在命令行中明确指定它。你可以尝试重命名它吗?或者在命令中添加--config webpack.server.js。

【讨论】:

  • webpack.config.js 是默认的,如果你用其他方式命名它,你应该明确指定它:npm run webpack-dev-server --mode=developement --config webpack-appserver.js
  • 啊 timoshenko 是对的,如果您不使用 webpack.config.js,则必须将自定义名称添加到命令脚本中
  • 非常感谢!我查看的所有资源都没有指定这一点。从现在开始,我会牢记这一点。
  • 这里的 webpack 文档中:webpack.js.org/guides/production 它们有时不是最容易理解的,但它们非常好!
【解决方案2】:

您可能缺少模块规则 js/jsx 数组上的 options 键来添加 @babel/preset-react:

EDIT 实际上,您也缺少resolve 键:

 module: {
        rules: [
            {
                test: /\.jsx?$/,
                loader: 'babel-loader',
                exclude: /node_modules/,
                // here add the babel preset-react
                options: {
                    presets: ['@babel/preset-react']
                }
            },
            {
                test: /\.(png|svg|jpg|gif)$/,
                exclude: /node_modules/,
                use: [
                    'file-loader'
                ]
            },
            {
                test: /\.css$/,
                use: [
                       'style-loader',
                        'css-loader'
                ]
            }
        ]
    },
resolve: {
    extensions: ['*', '.js', '.jsx']
}

【讨论】:

  • 不是通过 babelrc 配置的吗?
  • 我刚试过这个,错误仍然存​​在。我认为 .babelrc 无论如何都会处理所有预设和插件。但我不知道,因为我是配置 webpack 和 babel 的新手。
  • 我刚刚也添加了它,但它并没有修复错误
猜你喜欢
  • 2016-08-15
  • 1970-01-01
  • 2021-07-21
  • 2019-03-03
  • 2022-01-25
  • 1970-01-01
  • 2016-11-04
  • 2021-05-21
  • 2017-09-21
相关资源
最近更新 更多