Skip to content

02.环境准备

  • mkdir react18-core
  • cd react18-core
  • npm init -y

安装

npm install vite @vitejs/plugin-react --save

vite.config.js

js
import { defineConfig } from "vite";
import react from "@vitejs/plugin-react";
import path from "path";

export default defineConfig({
  resolve: {
    alias: {
      react: path.resolve("packages/react"),
      "react-dom": path.resolve("packages/react-dom"),
      "react-dom-bindings": path.resolve("packages/react-dom-bindings"),
      "react-reconciler": path.resolve("packages/react-reconciler"),
      scheduler: path.resolve("packages/scheduler"),
      shared: path.resolve("packages/shared"),
    },
  },
  plugins: [react()],
  optimizeDeps: {
    force: true,
  },
  server: {
    port: 8000
  }
});

jsconfig.json

json
{
  "compilerOptions": {
      "baseUrl": "packages",
    "paths": {
        "react/*": ["react/*"],
        "react-dom/*": ["react-dom/*"],
        "react-dom-bindings/*": ["react-dom-bindings/*"],
        "react-reconciler/*": ["react-reconciler/*"],
        "scheduler/*": ["scheduler/*"],
        "shared/*": ["shared/*"]
    }
  },
  "exclude": ["node_modules"]
}

src/index.jsx

jsx
console.log("index.jsx");

index.html

html
<!DOCTYPE html>
<html lang="en">
  <head>
    <title>React18-Core</title>
  </head>

  <body>
    <div id="root"></div>
    <script type="module" src="/packages/index.jsx"></script>
  </body>
</html>

package.json

json
{
  "name": "react18-core",
  "version": "1.0.0",
  "description": "core logic about react 18",
  "main": "index.js",
  "scripts": {
    "start": "vite",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "bugs": {
  },
  "dependencies": {
    "@vitejs/plugin-react": "^4.0.0",
    "vite": "^4.3.3"
  }
}

目录结构

所以我们需要创建一系列的文件夹: 以下是 React 18 项目的主要目录结构:

shell
react-18/
  ├── packages/
   ├── react/
   ├── react-dom/
   ├── react-reconciler/
   ├── scheduler/
   ├── react-dom-bindings/
   ├── share

基于 VitePress 构建