• 从0新建一个ts + webpack + react 项目


    step 1: 

            新建文件夹 并进行项目初始化

    1. mkdir react-webpack-ts
    2. cd react-webpack-ts
    3. npm init

            

            

    step 2:

            安装一些react依赖

    npm i webpack webpack-cli -D
    npm i react react-dom -S
    npm i @types/react @types/react-dom -D

    step 3:

            新建public/index.html文件

             新建src/App.tsx文件

    1. import React from 'react'
    2. function App() {
    3. return <h2>react-webpack-ts</h2>
    4. }
    5. export default App

            新建tsconfig.json文件

    1. {
    2. "compilerOptions": {
    3. "experimentalDecorators": true,
    4. "target": "ESNext",
    5. "useDefineForClassFields": true,
    6. "lib": [
    7. "DOM",
    8. "DOM.Iterable",
    9. "ESNext"
    10. ],
    11. "allowJs": false,
    12. "skipLibCheck": true,
    13. "esModuleInterop": false,
    14. "allowSyntheticDefaultImports": true,
    15. "strict": true,
    16. "forceConsistentCasingInFileNames": true,
    17. "module": "ESNext",
    18. "moduleResolution": "Node",
    19. "resolveJsonModule": true,
    20. "isolatedModules": true,
    21. "noEmit": true,
    22. "jsx": "react",
    23. "baseUrl": ".",
    24. "paths": {
    25. "@/*": [
    26. "src/*"
    27. ]
    28. }
    29. },
    30. "include": [
    31. "./src/**/*.ts",
    32. "./src/**/*.tsx"
    33. ]
    34. }

            新建index.tsx

    1. import React from 'react';
    2. import { createRoot } from 'react-dom/client';
    3. import App from './App';
    4. const root = document.getElementById('app');
    5. if(root) {
    6. createRoot(root).render(<App />)
    7. }

            文件夹结构:

            

     ok 初始化完成 需要新增webpack配置了

     step 4:

            新建webpack.base.js 配置基本输入输出        

    1. const path = require('path')
    2. const HtmlWebpackPlugin = require('html-webpack-plugin')
    3. module.exports = {
    4. // 入口文件
    5. entry: path.resolve(__dirname, '../src/index.tsx'),
    6. // 打包文件出口
    7. output: {
    8. filename: 'static/js/[name].[chunkhash:8].js', // 输出文件名称
    9. path: path.resolve(__dirname, '../dist'), // 打包的出口文件夹路径
    10. clean: true, // webpack4需要配置clean-webpack-plugin删除dist文件,webpack5内置了。
    11. publicPath: '/', // 打包后文件的公共前缀路径
    12. },
    13. }

             安装一些依赖 解析我们的代码 

    npm i babel-loader @babel/core @babel/preset-react @babel/preset-typescript -D
    npm i html-webpack-plugin -D
    npm i webpack-dev-server webpack-merge -D

            配置依赖

    1. module.exports = {
    2. ...,
    3. module: {
    4. rules: [
    5. {
    6. test: /.(ts|tsx)$/, // 匹配.ts, tsx文件
    7. use: {
    8. loader: 'babel-loader',
    9. options: {
    10. // 预设执行顺序由右往左,所以先处理ts,再处理jsx
    11. presets: [
    12. '@babel/preset-react',
    13. '@babel/preset-typescript'
    14. ]
    15. }
    16. }
    17. }
    18. ]
    19. },
    20. plugins: [
    21. new HtmlWebpackPlugin({
    22. template: path.resolve(__dirname, '../public/index.html'), // 模板取定义root节点的模板
    23. inject: true, // 自动注入静态资源
    24. })
    25. ],
    26. resolve: {
    27. extensions: ['.js', '.jsx', '.ts', '.tsx']
    28. }
    29. }

    step 5:

            新建webpack.dev.js

    1. // webpack.dev.js
    2. const path = require('path')
    3. const { merge } = require('webpack-merge')
    4. const baseConfig = require('./webpack.base.js')
    5. // 合并公共配置,并添加开发环境配置
    6. module.exports = merge(baseConfig, {
    7. mode: 'development', // 开发模式,打包更加快速,省了代码优化步骤
    8. devtool: 'eval-cheap-module-source-map', // 源码调试模式,后面会讲
    9. devServer: {
    10. port: 3000, // 服务端口号
    11. compress: false, // gzip压缩,开发环境不开启,提升热更新速度
    12. hot: true, // 开启热更新,后面会讲react模块热替换具体配置
    13. historyApiFallback: true, // 解决history路由404问题
    14. static: {
    15. directory: path.join(__dirname, "../public"), //托管静态资源public文件夹
    16. }
    17. }
    18. })

    step 6: 

            修改package.json 

    1. "dev": "webpack-dev-server -c build/webpack.dev.js"

    step 7: npm run dev

    然后项目就起来拉!qqqqq

  • 相关阅读:
    爬取豆瓣top250电影标题
    Python循环结构详解
    SpringCloud - 项目组织架构如何搭建
    maven
    【vue3】:前端登录功能解决方案
    自动控制原理7.2---信号的采样与保持
    #力扣:2315. 统计星号@FDDLC
    项目案例 | 丝路新贸易创新中心项目EPC模式下设计BIM技术应用
    IDEA新建SpringBoot项目时启动编译报错:Error:java: 无效的源发行版: 17
    数据分析——埋点
  • 原文地址:https://blog.csdn.net/weixin_38641550/article/details/126480109