首先确保你的电脑已经安装了 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') }) ] }
再次运行
会生成静态 html 文件以及 js 文件到 dist 目录中。
最后一步是需要一个服务器来对外发布这些文件了,一个简单粗暴的方案是:
npm i -g live-server cd dist live-server
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
在用Typescript开发时需要解构一个对象。在结构时我是这样做的:const{name,age}=body.value我想为这两个属性定义类型:const{name:string,age:number}=body.value但是这样会有问题。虽然能工作,但是实际上把name属性赋值给了string变量,把age属性赋值给了number变量。正确的语法是这样的:const{name,age}:{
1.字符串letsingleQuotes:string='single';letdoubleQuotes:string="double";lettemplateString:string=`Iam${singleQuotes}`;console.log(singleQuotes);console.log(doubleQuotes);console.log(templateString);2.数字c
函数是应用程序的基本组成部分,在Typescript中声明函数和JavaScript类似:functionname(parameter:type,parameter:type,...):returnType{//dosomething}和JavaScript不同的是它允许你为参数和返回值设置类型声明。例如:functionadd(a:number,b:number):number{returna+
什么是入门高级类型因为高级类型的内容比较多,但是有些基础类型的知识点还必须要用到高级类型的知识讲解才连贯,所以本节课把最常用的高级类型提前讲解一下,比如接口/联合类型/交叉类型.基础类型ts中基础类型有如下几种:boolean/number/string/object/数组/元组/枚举/any/undefined/null/void/never,下面我们一一举例学习:字面量介绍类型前,有一个前置知
什么是泛型?我们已经知道了Typescript为变量增加了类型声明,例如string,number,boolean等。而泛型可以让你为函数,类和接口定义可复用的通用类型。用简单的例子来介绍会更加容易理解。例如我们要编写一个函数返回数字数组中随机一个元素:functiongetRandomNumberElement(items:number[]):number{letrandomIndex=Math
React的memoAPI可用于优化React函数组件的渲染行为。我们将首先用一个样例组件来展示问题所在,然后使用ReactmemoAPI来解决它。请记得React中的大部分性能优化是不成熟的。React默认情况下很快,所以当你开始感觉性能变慢时可以尝试做一些性能优化。注意:不要把React的memoAPI和useMemoHook混淆了。Reactmemo用于把React组件包裹起来以防止重新渲染
英文介绍:The Mobile Robot Programming Toolkits(MRPT)is an extensive,cross-platform,and open source C++
Reactcontext是每个React开发工程师都应该知道的重要工具。它可以让你在应用程序中轻松地共享数据。在这份全面的指南中,我们将介绍什么是Reactcontext,如何使用它,何时以及何时不使用context,等等。即使你以前从未使用过Reactcontext,你也来对地方了。通过本文简单和循序渐进的例子你将学习到所需的一切知识。我们开始吧!什么是Reactcontext?Reactcon
如果你接触过React开发,肯定会遇到setState()方法,它是在类组件中更新state的方式,也是更新UI的主要方法。方法格式如下:setState(updater,[callback])根据React官方文档,不保证在调用此方法后state会立即更新:ThinkofsetState()asarequestratherthananimmediatecommandtoupdatethecomp
在一个React函数组件中想使用定时器函数setInterval,例如一个需求是每隔1秒把计数器加一:functionCounter(){let[count,setCount]=useState(0);useEffect(()=>{letid=setInterval(()=>{setCount(count+1);},1000);return()=>clearInterval(id);},[]);r
扫一扫关注公众号
添加我为好友,拉您入交流群!
请使用微信扫一扫!