You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何解决ReactJS+frontend-maven-plugin项目中的Unexpected token错误

解决React项目通过frontend-maven-plugin打包时的Webpack解析错误问题

你碰到的这个Unexpected token错误,本质是Webpack默认无法解析JSX语法——<App />这种写法属于React的JSX语法,不是标准JavaScript,必须借助Babel相关的loader来转译后,Webpack才能正确处理。下面一步步帮你搞定:

1. 安装必要的转译依赖

首先得给项目添加Babel相关的开发依赖,用来转译JSX和ES6+语法:

npm install --save-dev babel-core babel-loader babel-preset-env babel-preset-react

或者直接把这些依赖加到package.jsondevDependencies里:

"devDependencies": {
  "react-frame-component": "^2.0.2",
  "webpack": "^3.10.0",
  "webpack-dev-server": "^2.11.1",
  "babel-core": "^6.26.3",
  "babel-loader": "^7.1.5",
  "babel-preset-env": "^1.7.0",
  "babel-preset-react": "^6.24.1"
}

2. 修改Webpack配置,添加loader规则

更新你的webpack.config.js,加入module.rules配置,让Webpack用babel-loader处理.js.jsx文件:

var packageJSON = require('./package.json');
var path = require('path');
var webpack = require('webpack');
const PATHS = {
 build: path.join(__dirname, 'target', 'classes', 'META-INF', 'resources', 'webjars', packageJSON.name, packageJSON.version)
};
module.exports = {
 entry: './app/index2.js',
 output: {
 path: PATHS.build,
 filename: 'app-bundle.js'
 },
 resolve: {extensions: ['.js', '.jsx']},
 // 新增这部分配置
 module: {
   rules: [
     {
       test: /\.(js|jsx)$/,
       exclude: /node_modules/,
       use: 'babel-loader'
     }
   ]
 }
};

3. 添加Babel配置文件

在项目根目录创建.babelrc文件,告诉Babel用哪些预设来转译代码:

{
  "presets": ["env", "react"]
}

4. 修复app.jsx里的代码问题

你的app.jsx里有两个小问题:

  • JSX返回值不能是转义字符串,应该直接写JSX标签;
  • ReactDOM的导入和使用大小写要统一。
    修改后的app.jsx
import React from "react";
import ReactDOM from "react-dom"; // 这里统一成ReactDOM
class App extends React.Component {
 render() {
   return <p>Hello from React to the World!</p>; // 直接写JSX,不要转义字符串
 }
}
const app = document.getElementById("react");
const element = <App />;
const ref = ReactDOM.render(element, app);

5. 确认frontend-maven-plugin的配置(pom.xml)

确保你的pom.xml里的frontend-maven-plugin配置正确,能执行npm安装和构建命令,示例配置如下:

<plugin>
  <groupId>com.github.eirslett</groupId>
  <artifactId>frontend-maven-plugin</artifactId>
  <version>1.12.0</version>
  <executions>
    <execution>
      <id>install node and npm</id>
      <goals>
        <goal>install-node-and-npm</goal>
      </goals>
      <configuration>
        <nodeVersion>v14.21.3</nodeVersion> <!-- 选一个兼容webpack3的Node版本 -->
        <npmVersion>6.14.18</npmVersion>
      </configuration>
    </execution>
    <execution>
      <id>npm install</id>
      <goals>
        <goal>npm</goal>
      </goals>
      <configuration>
        <arguments>install</arguments>
      </configuration>
    </execution>
    <execution>
      <id>npm run build</id>
      <goals>
        <goal>npm</goal>
      </goals>
      <configuration>
        <arguments>run build</arguments>
      </configuration>
    </execution>
  </executions>
</plugin>

现在你可以重新执行mvn clean install,Webpack就能正确转译JSX代码,打包也能顺利完成了。

内容的提问来源于stack exchange,提问作者RuF

火山引擎 最新活动