webpack处理react
处理react jsx
使用babel-loader
pnpm i -D webpack webpack-cli babel-loader @babel/core @babel/preset-react
const path = require("path");
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
mode: "development",
entry: './src/main.jsx',
output: {
filename: "[name].js",
path: path.join(__dirname, "./dist")
},
devServer: {
hot: true,
open: false
},
module: {
rules: [
{
test: /\.jsx$/,
use: [
{
loader: "babel-loader",
options: {
presets: [
[
'@babel/preset-react',
{
runtime: 'automatic' // 自动注入jsx-runtime
}
]
]
}
}
]
},
{
test: /\.css$/,
use: [
'style-loader',
'css-loader'
]
}
]
},
plugins: [
new HtmlWebpackPlugin({
template: "./template.html"
})
]
}
处理react tsx
两种主流的 tsx
加载方案
- 一是使用 Babel 的
@babel/preset-typescript
插件; - 二是直接使用
ts-loader
// 使用 @babel/preset-typescript
module.exports = {
resolve: {
extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
module: {
rules: [
{
test: /\.tsx$/,
loader: 'babel-loader',
options: {
'presets': [
["@babel/preset-react", {
"runtime": "automatic"
}],
'@babel/preset-typescript'
]
}
},
],
},
}
// 使用ts-loader
module.exports = {
resolve: {
extensions: ['.js', '.jsx', '.ts', '.tsx'],
},
module: {
rules: [
{
test: /\.tsx$/,
use: 'ts-loader',
},
],
}
};