React + Typescript + Webpack


prtyaa
prtyaa 2023-12-26 17:34:29 65665
分类专栏: 资讯

首先确保你的电脑已经安装了 Node.js。

第一步 启动项目

首先创建一个目录并初始化项目:

mkdir react_typescript_webpack
cd react_typescript_webpack
npm init -y

在上述目录中创建一个子目录 src,用于放置源码:

mkdir src
touch src/index.tsx

然后在这个目录中新建一个名为 index.tsx 的入口文件。

依赖

这里我使用 npm 所以在 package.json 中填写如下内容:

{
  "name": "react_typescript_webpack",
  "version": "1.0.0",
  "description": "Build UI that scales",
  "scripts": {
    "build": "webpack --config webpack.config.js"
  },
  "keywords": [
    "react",
    "typescript",
    "webpack"
  ],
  "author": "bonta.jacopo@gmail.com",
  "license": "ISC",
  "dependencies": {
    "react": "^16.12.0",
    "react-dom": "^16.12.0"
  },
  "devDependencies": {
    "@types/react": "^16.8.24",
    "@types/react-dom": "^16.0.5",
    "@types/webpack": "4.1.4",
    "ts-loader": "^6.2.1",
    "typescript": "^3.4.3",
    "webpack": "^4.41.5",
    "webpack-cli": "^3.3.10"
  }
}

要安装这些依赖,运行:

npm install

第二步 配置

TypeScript 配置文件

touch tsconfig.json

输入如下内容:

{
  "compilerOptions": {
    "outDir": "./dist",
    "target": "es5",
    "module": "es6",
    "jsx": "react",
    "noImplicitAny": true,
    "allowSyntheticDefaultImports": true
  }
}

webpack 配置文件

touch webpack.config.js

输入如下内容:

const path = require('path');

module.exports = {
    mode: 'none',
    entry: {
        app: path.join(__dirname, 'src', 'index.tsx')
    },
    target: 'web',
    resolve: {
        extensions: ['.ts', '.tsx', '.js']
    },
    module: {
        rules: [
            {
                test: /\.tsx?$/,
                use: 'ts-loader',
                exclude: '/node_modules/'
            }
        ],
    },
    output: {
        filename: '[name].js',
        path: path.resolve(__dirname, 'dist')
    }
}

第三步:编写项目代码

在入口文件 index.tsx 中编写业务逻辑:

import React from 'react';
import ReactDOM from 'react-dom';

import App from './App';

ReactDOM.render(<App />, document.querySelector('#root'));

编写 App.tsx 文件:

import React from 'react';

export default function App() {
    return <h1>Hello, world!</h1>
}

运行编译命令:

npm run build

现在会编译生成一个纯 JS 文件。

接下来在 src 目录中编写我们的静态页面 index.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>React Typescript Webpack</title>
</head>
<body>
    <!-- React app root element -->
    <div id="root"></div>
</body>
</html>

安装 html-webpack-plugin

npm install --save-dev html-webpack-plugin@4.5.2

编辑 webpack.config.js 如下:

const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');

module.exports = {
    mode: 'none',
    entry: {
        app: path.join(__dirname, 'src', 'index.tsx')
    },
    target: 'web',
    resolve: {
        extensions: ['.ts', '.tsx', '.js']
    },
    module: {
        rules: [
            {
                test: /\.tsx?$/,
                use: 'ts-loader',
                exclude: '/node_modules/'
            }
        ],
    },
    output: {
        filename: '[name].js',
        path: path.resolve(__dirname, 'dist')
    },
    plugins: [
        new HtmlWebpackPlugin({
            template: path.join(__dirname, 'src', 'index.html')
        })
    ]
}

再次运行

npm run build

会生成静态 html 文件以及 js 文件到 dist 目录中。

最后一步是需要一个服务器来对外发布这些文件了,一个简单粗暴的方案是:

npm i -g live-server
cd dist
live-server

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=30934
赞同 0
评论 0 条
prtyaaL1
粉丝 1 发表 2554 + 关注 私信
上周热门
银河麒麟添加网络打印机时,出现“client-error-not-possible”错误提示  1507
银河麒麟打印带有图像的文档时出错  1426
银河麒麟添加打印机时,出现“server-error-internal-error”  1217
统信操作系统各版本介绍  1137
统信桌面专业版【如何查询系统安装时间】  1134
统信桌面专业版【全盘安装UOS系统】介绍  1090
麒麟系统也能完整体验微信啦!  1046
统信【启动盘制作工具】使用介绍  698
统信桌面专业版【一个U盘做多个系统启动盘】的方法  639
信刻全自动档案蓝光光盘检测一体机  545
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
信创开放社区邀请他人注册的具体步骤如下 15
如何玩转信创开放社区—从小白进阶到专家 15
方德桌面操作系统 14
我有15积分有什么用? 13
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

添加我为好友,拉您入交流群!

请使用微信扫一扫!