React工程搭建的脚手架很多,比较流行的,比如 Create React App,同构方案Next.js等。不过这里记录的是自己使用webpack的方式来搭建React项目的要点。
其实对于Reac项目来讲,最核心的点还是使webpack能认识.jsx和.tsx文件并能正确解析。
所以其核心还是借助babel-loader。针对react项目,babel有专门的预设集集 @babel/preset-react 。

.jsx文件正确解析

  1. yarn add -D webpack webpack-cli babel-loader @babel/core @babel/preset-react
  2. yarn add react react-dom

配置babel

  1. module.exports = {
  2. mode: 'development',
  3. entry: "./src/index.jsx",
  4. output: {
  5. filename: "[name].js",
  6. path: path.join(__dirname, "./dist"),
  7. },
  8. module: {
  9. rules: [
  10. {
  11. test: /\.jsx$/,
  12. loader: "babel-loader",
  13. options: {
  14. presets: ["@babel/preset-react"],
  15. }
  16. },
  17. ],
  18. },
  19. };

这样一个最基本的react项目就能run起来了。
编写react代码

  1. import ReactDom from 'react-dom/client'
  2. import React from 'react'
  3. import App from './app'
  4. // react v18
  5. const root = ReactDom.createRoot(
  6. document.getElementById('root')
  7. )
  8. root.render(<App />)
  1. import React, { useEffect } from 'react'
  2. export default function Index() {
  3. useEffect(() => {
  4. console.log('App mounted')
  5. }, [])
  6. return (
  7. <div>React app</div>
  8. )
  9. }

执行 yarn build (配置build script为 webpack就行),可以正确打包。

.tsx文件正确解析

使用ts-loader
  1. yarn add -D typescript ts-loader

webpack.config.js中增加rules:

  1. module.exports = {
  2. resolve: { // 不用 import 的时候写后缀了
  3. extensions: ['.js', '.jsx', '.ts', '.tsx'],
  4. },
  5. module: {
  6. rules: [
  7. // ....
  8. {
  9. test: /\.tsx$/,
  10. use: 'ts-loader',
  11. },
  12. ],
  13. }
  14. };

增加tsconfig对jsx的支持

  1. {
  2. "compilerOptions": {
  3. //...
  4. "jsx": "react-jsx"
  5. }
  6. }

使用 @babel/preset-typescript
  1. yarn add -D typescript @babel/preset-typescript

修改rules

  1. module.exports = {
  2. module: {
  3. rules: [
  4. {
  5. test: /\.tsx$/,
  6. loader: 'babel-loader',
  7. options: {
  8. 'presets': [["@babel/preset-react", {
  9. "runtime": "automatic"
  10. }],
  11. '@babel/preset-typescript']
  12. }
  13. },
  14. ],
  15. },
  16. }

runtime:automatic设置之后就不需要引入react了(import React from “react”)。

其他

一个React 项目肯定不止是这些了,不过核心就基本上是这些。至于除此之外的可以参考其他范畴的配置,比如devServer,css等。

一般情况下,开发react项目也很少有人自己从0开始构建。
create-react-app 是官方脚手架,不过想要改配置麻烦一点,以前需要eject,现在可以借助craco帮助开发者在不eject的情况下修改。
umi.js、next.js等方案也都是社区活跃,开箱即用的选择。