• 从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

  • 相关阅读:
    【bootstrap】bootstrap布局范例--20220917
    新生报到管理系统毕业设计,新生报到系统代码论文需求分析,新生报到系统数据库设计开题需求分析
    adb shell执行定时2小时命令
    解读《互联网政务应用安全管理规定》网络和数据安全中的身份认证和审计合规建设
    Mybatis源码解析(四):sql语句及#{}、${}的解析
    c++成员变量和函数的储存
    webpack快速入门-处理样式资源
    抓到Dubbo异步调用的小BUG,再送你一个贡献开源代码的机会
    ZMQ中请求-应答模式的可靠性设计
    Taurus.MVC 微服务框架 入门开发教程:项目部署:6、微服务应用程序Docker部署实现多开。
  • 原文地址:https://blog.csdn.net/weixin_38641550/article/details/126480109