前言:拖了这么久,小菜鸟终于开始正式应用react,和es6来开发项目了。之前超喜欢同学的一个博客风格,这里贴一下地址:https://iwenku.net/,PC端是他很久之前做的,最近他重新做了一下移动端的。看完之后,我内心也勾勒出了一个自己的博客,所以开始正式搭建自己的博客作为项目练手吧。

关于react的虚拟DOM:

在前端开发的过程中,我们经常会做的一件事就是将变化的数据实时更新到UI上,这时就需要对DOM进行更新和重新渲染,而频繁的DOM操作通常是性能瓶颈产生的原因之一,有时候我们会遇到这样一种尴尬的情况:比如有一个列表数据,当用户执行刷新操作时,Ajax会重新从后台请求数据,即使新请求的数据和上次完全相同,DOM也会被全部更新一遍并进行重新渲染,这样就产生了不必要的性能开销。

React为此引入了虚拟DOM(Virtual DOM)机制:对于每一个组件,React会在内存中构建一个相对应的DOM树,基于React开发时所有的DOM构造都是通过虚拟DOM进行,每当组件的状态发生变化时,React都会重新构建整个DOM数据,然后将当前的整个DOM树和上一次的DOM树进行对比,得出DOM结构变化的部分(Patchs),然后将这些Patchs 再更新到真实DOM中。整个过程都是在内存中进行,因此是非常高效的。

一,搭建环境

1,安装node

第一步的话首先得确定安装好了node的环境,这个毋庸置疑哈。国外的官网的话好像得翻墙,方正我就在node中文网上下载的。(http://nodejs.cn/)安装过程就不说了,方正这个步骤很简单的。

2,初始化,生成package.json

npm init (基本直接按回车就可以了)

3,安装webpack

先全局安装:   npm install -g webpack

然后项目安装 : npm install  webpack --save-dev

3,安装react

npm install react react-dom --save-dev

4,安装babel

因为我们要用的是es2015,浏览器没办法直接识别,所以需要安装babel插件,babel插件是webpack需要的加载器,如果没有这几个加载器我们的jsx语法,和es2015语法就会报错。如果某些代码需要调用Babel的API进行转码,就要使用babel-core模块。

npm install babel-loader babel-core --save-dev

这里我们安装的webpack1.x系列,安装的时候要注意,webpack2.x会有变化。

因为ES6语法每年都在更新,因此,我们需要一定的规则去转换。

npm install babel-preset-es2015 babel-preset-react --save-dev

5,安装webpack-dev-server

Webpack给本地开发提供了一个可选的服务器webpack-dev-server。webpack-dev-server是一个很小的express应用,使用前需要用npm安装。注意安装的时候要和webpack的版本对应,不然就会报错!

然后我们修改package.json的启动处:

"scripts": {
"dev": "webpack-dev-server --devtool --progress",
"build": "webpack -p"
}

6,安装其他插件  

  • 安装autoprefixer

    这个插件可以自动补全浏览器前缀

    npm install autoprefixer --save

  • 安装插件处理样式表

    npm install style-loader css-loader --save

    css-loader使得你能使用类似@import url(...)的方法实现require()的功能。

    style-loader将所有的计算后的样式加入到页面中。两者组合就可以把样式嵌入到webpack打包后的js文件中。

    如果不想把css打包到脚本中,可用extract-text-webpack-plugin插件。

  • 安装jsx-loader

    npm install jsx-loader --save

7,安装完成后的package.json文件

{
"name": "react-blog",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"dev": "webpack-dev-server --devtool --progress",
"build": "webpack -p"
},
"repository": {
"type": "git",
"url": "https://github.com/sprout-echo"
},
"author": "sprout",
"license": "ISC",
"devDependencies": {
"autoprefixer": "^7.1.1",
"babel-core": "^6.25.0",
"babel-preset-stage-3": "^6.24.1",
"css-loader": "^0.28.4",
"jsx-loader": "^0.13.2",
"react": "^15.6.1",
"react-dom": "^15.6.1",
"style-loader": "^0.18.2",
"url-loader": "^0.5.9",
"webpack": "^1.9.11",
"webpack-dev-server": "^1.15.0"
},
"dependencies": {
"babel-loader": "^7.1.1",
"babel-preset-es2015": "^6.24.1",
"babel-preset-react": "^6.24.1"
}
}

8,新建一个文件 webpack.config.js

'use strict';
var path = require('path');
var webpack = require('webpack');
module.exports = {
//为你的代码创建源地址。当有任何报错的时候可以让你更加精确地定位到文件和行号
devtool:'eval-source-map',
entry:{
main:'./src/entry.js' //唯一入口文件
},
output:{
path:'./build', //打包后文件存放的地方
filename:'main.js', //打包后输出文件的文件名
publicPath:'http://localhost:8800/build' //启动本地服务后的根目录
},
//服务器配置
devServer:{
port:8800,
colors:true, //终端中输出结果为彩色
historyApiFallback: true, //不跳转
inline: true //实时刷新
},
module:{
//文件的加载器
//url-loader用于在js中加载png/jpg格式的图片文件,css/style loader用于加载css文件,less-loader加载器是将less编译成css文件;
loaders:[
{test:/\.js?$/,loader:'jsx!babel',include:/src/},
{test:/\.css$/,loader:['style-loader','css-loader']},
{test:/\.(png|jpg)$/,loader:'url-loader?limit=819200'}
]
},
postcss: [
require('autoprefixer') //调用autoprefixer插件,css3自动补全
],
//resolve:用于指明程序自动补全识别哪些后缀
resolve:{
extensions:['','.js','.json','coffee']
}
}

具体的解释都加了注释,看了很多别人写的,感觉不一样的人有不一样的写法,所以具体的还是得自己看官网,自己来摸索。

9,项目启动

可以用命令行来启动

babel demo.js --presets es2015

但是每次启动的时候都要加参数是很麻烦的,所以我们就要想想办法。

在根目录下新建一个.babelrc文件

(windows下不允许直接右键没有文件名的文件,可以用cmd命令创建)

type nul>.babelrc

然后在文件中写入:

{
"presets":["es2015","react","stage-3"],
"plugins":[]
}

除了上面的方法,也可以在package.json文件中进行配置,添加

“babel”:{
"presets":["es2015","react","stage-3"]
}

然后我们启动项目的时候就可以直接输入  webpack

npm run dev

10,项目结构

最后贴一下目前的项目结构,还没有搭建博客的具体内容

build中的文件是webpack打包后的脚本

src中存放的就是我们的源代码,entry.js是入口文件,test.js是一个测试的react代码

好啦!环境具体测试过,没有任何问题,接下来就是投身于博客的具体开发啦

react+es6+webpack环境搭建以及项目入门的更多相关文章

  1. Webpack+React+ES6 最新环境搭建和配置(2017年)

    刚刚学习React,发现React在ES6下的语法才是本体,结合ES6新的语言特性,使组件化开发显得更加直观.而且现在的Angular2也开始使用支持强类型的TypeScript,转译(transpi ...

  2. React+ES6+Webpack环境配置

    转自http://www.cnblogs.com/chenziyu-blog/p/5675086.html 参考http://www.tuicool.com/articles/BrAVv2y Reac ...

  3. reactjs学习一(环境搭配react+es6+webpack热部署)

    reactjs学习一(环境搭配react+es6+webpack热部署) 本文的源码在这里下载 https://github.com/tianxiangbing/webpack-study   或者使 ...

  4. [webpack] 配置react+es6开发环境

    写在前面 每次开新项目都要重新安装需要的包,简单记录一下. 以下仅包含最简单的功能: 编译react 编译es6 打包src中入口文件index.js至dist webpack配置react+es6开 ...

  5. typescript+react+antd基础环境搭建

    typescript+react+antd基础环境搭建(包含样式定制) tsconfig.json 配置 // 具体配置可以看上面的链接 这里module moduleResolution的配置都会影 ...

  6. React Native iOS环境搭建

    前段时间React Native for Android发布,感觉React Native会越来越多的公司开始研究.使用.所以周六也抽空搭建了iOS的开发环境,以便以后利用空闲的时间能够学习一下. 废 ...

  7. React Native的环境搭建以及开发的IDE

    (一)前言 前面的课程我们已经对React Native的环境搭建以及开发的IDE做了相关的讲解,今天我们的主要讲解的是应用设备运行(Running)以及调试方法(Debugging).本节的前提条件 ...

  8. Grunt JS构建环境搭建以及使用入门

    Grunt JS构建环境搭建以及使用入门 1.应用场景 一种自动化任务处理工具,对于日常的需求(代码规则检查.代码合并)可以实现自动化执行,只需要保留package.json和Gruntfile.js ...

  9. webpack 环境搭建

    Webpack环境搭建 一.安装node 1.node官网下载node并安装----node里面内置了npm所以用在安装npm了 2.命令行输入node -v查看node是否安装成功 二.全局安装we ...

随机推荐

  1. C#开启异步 线程的四种方式

    一.异步委托开启线程public static void Main(string[] args){ Action<int,int> a=add; a.BeginInvoke(3,4,nul ...

  2. df=df.reset_index(drop=True)

    df=df.reset_index(drop=True) ============ df = pd.read_csv('./train_file/train.csv').dropna()df_test ...

  3. jenkins centos slave起不来报错The SSH key presented by the remote host does not match the key saved in the Known Hosts file against this host. Connections to this host will be denied until the two keys mat

    场景:我的centos-204是一台centos的机器,本来用https://www.cnblogs.com/zndxall/p/8297356.html 的centos slave方式搭建ok的,一 ...

  4. java面试题 wait和sleep区别

    sleep() 方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间 wait()是Objec ...

  5. cocos2d JS 源生js实现each方法

    javascript笔记——源生js实现each方法   出处:http://www.lovejavascript.com/#!zone/blog/content.html?id=48 jquery里 ...

  6. 扫黑除恶Team second

    团队介绍: 团队序号:② 团队名称:扫黑除恶 团队项目:飞机大战游戏 团队码云地址:https://gitee.com/MrLiu199903/seflash/branches 撰写人:刘新飞 学号: ...

  7. C++ 自定义订单号

    自定义订单号 #include<iostream> #include<stack> #include <time.h> #include <sys/timeb ...

  8. Qt QComBox 文本框输入itemText && 文本框查找item && 本文框添加Item &&设置显示Item数量

    comBox的几种状态图如下:   图1:ui->comboBox->setEditable(true); 图2:ui->comboBox->setEditable(false ...

  9. Rsync数据同步工具

                                        Rsync数据同步工具 什么是Rsync? Rsync是一款开源的.快速的.多功能的,可以实现全量及增量的本地或原程数据同步备份 ...

  10. CentOS 7 配置DHCP中继代理服务

    DHCP服务器只作用于局域网同一网段内,客户端是通过广播消息来获得DHCP服务器响应后才能得到IP地址的,但广播消息不能跨越子网,那么如何让客户端获取到DHCP服务器提供的IP地址呢?这就是DHCP中 ...