从零构建一个react+webpack+typescript的应用
今天要完成在windows下从零开始构建一个react应用的任务
首先,新建一个文件夹,然后在该文件夹下使用命令npm init 初始化一个node项目。
然后安装所需依赖,
npm i react react-dom mobx @types/react @types/react-dom --save
npm i webpack webpack-dev-server typescript ts-loader source-map-loader --save-dev
然后在根目录下新建文件夹src,config,新建文件index.html,tsconfig.json
在config目录下新建文件webpack.config.dev.js
添加tsconfig.json配置文件内容:
{
"compilerOptions": {
"allowJs": true,
"allowUnreachableCode": true,
"outDir": "./public/",
"sourceMap": true,
"noImplicitAny": true,
"module": "commonjs",
"target": "es5",
"jsx": "react",
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"removeComments": true
},
"include": [
"./src/**/*"
]
}
添加webpack.config.dev.js内容:
const config = {
entry: './src/index.tsx',
output: { filename: 'bundle.js', path: '/public', publicPath: '/public' },
devtool: 'eval',
resolve: { extensions: ['.webpack.js', '.web.js', '.ts', '.tsx', '.js'] },
module: {
loaders: [{ test: /\.tsx?$/, loader: 'ts-loader' }]
},
devServer: {
contentBase: "./",//本地服务器所加载的页面所在的目录
historyApiFallback: true,//不跳转
inline: true,//实时刷新
}
}
module.exports = config
然后添加index.html内容:
<!DOCTYPE html>
<html lang="en"> <head>
<title></title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head> <body>
<div id="app"> </div>
</body>
<script src="./public/bundle.js"></script>
</html>
在inedx.html中引入的./public/bundle.js即webpack配置文件中output项最终生成的文件。
关于webpack的配置,可以参阅webpack文档: http://www.css88.com/doc/webpack2/concepts/output/
关于tsconfig.json的配置,可以参阅文档:http://www.typescriptlang.org/docs/handbook/tsconfig-json.html,或者直接查看它的中文翻译版:https://www.w3cschool.cn/typescript/typescript-tsconfig-json.html
在进行完以上步骤之后其实整个webpack和typescript的搭建已经完成了。现在,在package.json中的scripts中添加
"start": "webpack-dev-server --config config/webpack.config.dev.js"
然后在命令行内运行 npm start 命令,已经可以运行,但是还是会报错入口文件不存在。
在webpack中,我们设置了入口文件为./src/index.tsx,那么我们就去该目录下创建该文件,然后在里面添加内容:
import * as React from 'react'
import { render } from 'react-dom'
import {observer, Provider,inject } from 'mobx-react' class Text extends React.Component {
constructor(props: any) {
super(props)
}
render() {
return (
<div>
123333
</div>
)
}
} render(<Provider ><Text /></Provider>, document.getElementById('app'))
然后再重新npm start开启node服务,访问localhost:8080端口,可以看到页面上成功输出了123333,证明我们的typescript+webpack+react的搭建已经基本完成。
从零构建一个react+webpack+typescript的应用的更多相关文章
- (24/24) webpack小案例--自己动手用webpack构建一个React的开发环境
通过前面的学习,对webpack有了更深的认识,故此节我们就利用前面相关知识自己动手用webpack构建一个React的开发环境,就算是一个小案例吧. 注:此处使用的开发工具是Webstorm. 1. ...
- 从零构建一个简单的 Python Web框架
为什么你想要自己构建一个 web 框架呢?我想,原因有以下几点: 你有一个新奇的想法,觉得将会取代其他的框架 你想要获得一些名气 你遇到的问题很独特,以至于现有的框架不太合适 你对 web 框架是如何 ...
- 如何使用npm构建一个react demo项目
方法一: 1) 安装node.js环境 点我进入nodejs官网 1.1) 下载LTS(Long term support)版本,安装 1.2) 在cmd中使用以下命令查看node是否安装成功 no ...
- 从零实现一个React:Luster(一):JSX解析器
前言 这是之前在掘金发的两条沸点,懒得写了,直接复制过来作为前言了.然后这个项目可能之后还会继续写,增加一些路由或者模板引擎的指令什么的,但是再过没多久寒假就有大块时间了就可能不摸这个鱼去开其它坑了, ...
- react,react-router,redux+react-redux 构建一个React Demo
创建初始化应用 加速我们的npm. npm install -g cnpm --registry=https://registry.npm.taobao.org 利用create-react-app ...
- 从零配置webpack(react+less+typescript+mobx)
本文目标 从零搭建出一套支持react+less+typescript+mobx的webpack配置 最简化webpack配置 首页要初始化yarn和安装webpack的依赖 yarn init -y ...
- typescript+webpack构建一个js库
依赖说明 入口文件 tsconfig配置 webpack配置文件 webpack入口文件配置 webpack为typescript和less文件配置各自的loader webpack的output配置 ...
- 使用parcel打造一个零配置的react工作流
parcel是一个前端打包工具.因其推崇的零配置理念,和webpack形成了鲜明对比.对于我这样一个被后端IDE智能提示宠坏的猿,自然是对webpack提不起爱.平时也都是使用CLI默认配置好webp ...
- 真刀实战地搭建React+Webpack+Express搭建一个简易聊天室
一.前面bb两句 因为自惭(自残)webpack配置还不够熟悉,想折腾着做一个小实例熟悉.想着七夕快到了,做一个聊天室自己和自己聊天吧哈哈.好了,可以停止bb了,说一下干货. 二. 这个项目能学到啥? ...
随机推荐
- 狙杀ES6之开光篇
前言 最近有很多小伙伴在后台留言说,闰土哥,是时候来一波干货了!(机智的你们似乎已经猜到我接下来要说什么了,哈哈-).没错,今天闰土为大家带来了久违的干货文章,而且是一个系列的哦!(文章系列较长,请自 ...
- docker~写个容器启动的bash脚本
回到目录 bash脚本在linux里就相当于win里的bat和cmd及ps脚本,可以把一般指令组织在一起,统一去执行,比如我有一些docker容器需要统一去启动,这时,你可以把它们写成一个bash脚本 ...
- jacoco统计Android手工测试覆盖率并自动上报服务器
改进了几个点 1. 不用借助Instrumentation启动,正常启动即可: 2. 测试代码不用push到主分支,主分支代码拉到本地后用git apply patch方式合并覆盖率代码: 3. 测试 ...
- C++学习(八)入门篇——复合类型
数组(需要声明以下三点): (1)存储在每个元素中值的类型 (2)数组名 (3)数组中的元素数 声明数组的通用格式如下: typeName arrayName[arraySize];arraySize ...
- (转)java提高篇(二)-----理解java的三大特性之继承
在<Think in java>中有这样一句话:复用代码是Java众多引人注目的功能之一.但要想成为极具革命性的语言,仅仅能够复制代码并对加以改变是不够的,它还必须能够做更多的事情.在这句 ...
- 读Zepto源码之Deferred模块
Deferred 模块也不是必备的模块,但是 ajax 模块中,要用到 promise 风格,必需引入 Deferred 模块.Deferred 也用到了上一篇文章<读Zepto源码之Callb ...
- NYOJ--541--最强DE 战斗力(递推)
最强DE 战斗力 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 春秋战国时期,赵国地大物博,资源非常丰富,人民安居乐业.但许多国家对它虎视眈眈,准备联合起来对赵国发 ...
- 【Java学习笔记之八】java二维数组及其多维数组的内存应用拓展延伸
多维数组声明 数据类型[][] 数组名称; 数据类型[] 数组名称[]; 数据类型数组名称[][]; 以上三种语法在声明二维数组时的功能是等价的.同理,声明三维数组时需要三对中括号,中括号的位置可以在 ...
- Python 协程总结
Python 协程总结 理解 协程,又称为微线程,看上去像是子程序,但是它和子程序又不太一样,它在执行的过程中,可以在中断当前的子程序后去执行别的子程序,再返回来执行之前的子程序,但是它的相关信息还是 ...
- 嵌入式GPIO接口及操作(一)
GPIO意思就是通用输入输出,一些引脚可以通过他们输出高低电平,或者通过它们读入引脚的状态.对GPIO的操作是对所有硬件的操作最基本的技能.一.通过寄存器来操作GPIO引脚,一个引脚可以用于输入.输出 ...