模块解析失败:使用 webpack 5 时出现意外令牌
Module parse failed: Unexpected token when using webpack 5
当我使用 webpack 5 编译我的 React 项目时,显示此错误:
[root@VM-0-16-centos cruise-web]# yarn build
yarn run v1.22.10
$ webpack --config config/dev.config.js
[webpack-cli] Compilation finished
assets by status 341 bytes [cached] 1 asset
./src/index.js 630 bytes [built] [code generated] [1 error]
ERROR in ./src/index.js 10:2
Module parse failed: Unexpected token (10:2)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
|
| ReactDOM.render(
> <React.StrictMode>
| <Provider store={store}>
| {routes}
webpack 5.6.0 compiled with 1 error in 126 ms
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
这是我的 index.js
:
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import { Provider } from 'react-redux';
import reportWebVitals from './reportWebVitals';
import routes from './routes/routes';
import store from './store';
ReactDOM.render(
<React.StrictMode>
<Provider store={store}>
{routes}
</Provider>
</React.StrictMode>,
document.getElementById('root')
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
reportWebVitals();
这是我的 package.json
配置:
"scripts": {
"start": "react-scripts start",
"build": "webpack --config config/dev.config.js",
"test": "react-scripts test",
"eject": "react-scripts eject"
}
这是 dev.config.js
配置:
const path = require('path');
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
use: [
"style-loader",
"css-loader",
{
loader: "postcss-loader",
options: {
postcssOptions: {
plugins: [
[
"postcss-preset-env",
{
// Options
},
],
],
},
},
},
],
},
],
},
entry: './src/index.js',
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'build'),
},
};
我应该怎么做才能解决这个问题?
您需要为所有 .js
文件定义规则并向其添加 babel-loader
:https://github.com/babel/babel-loader
Webpack 的工作方式是您必须告诉它为每个特定的文件类型扩展做什么(或者您定义规则)。 Javascript,本质上不理解JSX
,你需要使用加载器,以便它可以被解析为常规和可用的Javascript。默认情况下,Webpack 不理解 JSX。
当我使用 webpack 5 编译我的 React 项目时,显示此错误:
[root@VM-0-16-centos cruise-web]# yarn build
yarn run v1.22.10
$ webpack --config config/dev.config.js
[webpack-cli] Compilation finished
assets by status 341 bytes [cached] 1 asset
./src/index.js 630 bytes [built] [code generated] [1 error]
ERROR in ./src/index.js 10:2
Module parse failed: Unexpected token (10:2)
You may need an appropriate loader to handle this file type, currently no loaders are configured to process this file. See https://webpack.js.org/concepts#loaders
|
| ReactDOM.render(
> <React.StrictMode>
| <Provider store={store}>
| {routes}
webpack 5.6.0 compiled with 1 error in 126 ms
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
这是我的 index.js
:
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import { Provider } from 'react-redux';
import reportWebVitals from './reportWebVitals';
import routes from './routes/routes';
import store from './store';
ReactDOM.render(
<React.StrictMode>
<Provider store={store}>
{routes}
</Provider>
</React.StrictMode>,
document.getElementById('root')
);
// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
reportWebVitals();
这是我的 package.json
配置:
"scripts": {
"start": "react-scripts start",
"build": "webpack --config config/dev.config.js",
"test": "react-scripts test",
"eject": "react-scripts eject"
}
这是 dev.config.js
配置:
const path = require('path');
module.exports = {
module: {
rules: [
{
test: /\.css$/i,
use: [
"style-loader",
"css-loader",
{
loader: "postcss-loader",
options: {
postcssOptions: {
plugins: [
[
"postcss-preset-env",
{
// Options
},
],
],
},
},
},
],
},
],
},
entry: './src/index.js',
output: {
filename: 'main.js',
path: path.resolve(__dirname, 'build'),
},
};
我应该怎么做才能解决这个问题?
您需要为所有 .js
文件定义规则并向其添加 babel-loader
:https://github.com/babel/babel-loader
Webpack 的工作方式是您必须告诉它为每个特定的文件类型扩展做什么(或者您定义规则)。 Javascript,本质上不理解JSX
,你需要使用加载器,以便它可以被解析为常规和可用的Javascript。默认情况下,Webpack 不理解 JSX。