ES6新纳入了很多振奋民气的新特性,真的很让人忍不住去考试测验一下。不过,由于现在大部分的浏览器对ES6的支持程度都不是很好。以是如果想要放心地利用一些新特性,还须要用一些工具,将ES6或者ES7的代码转为ES5的代码。本日,就配置了一下环境,写了一个react-router,紧张是练习自己的编程能力,哈哈。。。在此分享一下!
二、ES6环境搭建
搭建环境的工具有很多种,jspm,webpack,gulp等等。。。我紧张是采取gulp+babel+browserify来搭建的。详细步骤如下(以下步骤均在node环境下进行):
①新建项目,打开命令行或者git hash,输入git init.
②安装gulp,输入npm install gulp
③安装一些必须的插件,看个人须要吧。我安装了一些: babel-preset-es2015 browserify gulp-babel gulp-concat gulp-cssnano gulp-uglify vinyl-source-stream gulp-sass
④配置gulpfile文件。
文件目录构造如下:
我的配置如下:
const gulp = require('gulp');\rconst babel = require('gulp-babel');\rconst uglify = require('gulp-uglify');\rconst sass = require('gulp-sass');\rconst rename = require('gulp-rename');\rconst cssnano = require('gulp-cssnano');\rconst concat = require('gulp-concat');\rconst browserify = require('browserify');\rconst babelify=require('babelify');\rconst source = require('vinyl-source-stream');\r// 编译并压缩js\rgulp.task('convertJS', function{\r return gulp.src('app/js/.js')\r .pipe(babel({\r presets: ['es2015','react']\r }))\r .pipe(uglify)\r .pipe(gulp.dest('dist/js'))\r})\r// 合并并压缩css\rgulp.task('convertCSS', function{\r return gulp.src('app/style/.scss')\r .pipe(sass)\r .pipe(concat('app.css'))\r .pipe(cssnano)\r .pipe(rename(function(path){\r path.basename += '.min';\r }))\r .pipe(gulp.dest('dist/style'));\r})\r// 监视文件变革,自动实行任务\rgulp.task('watch', function{\r gulp.watch('app/style/.scss', ['convertCSS']);\r gulp.watch('app/js/.js', ['convertJS', 'browserify']);\r})\r// browserify\rgulp.task(\"大众browserify\公众, function {\r var b = browserify({\r entries: \公众dist/js/app.js\"大众\r });\r return b.transform(babelify)\r .bundle\r .pipe(source(\"大众bundle.js\公众))\r .pipe(gulp.dest(\公众dist/js\"大众));\r});\rgulp.task('start', ['convertJS', 'convertCSS', 'browserify', 'watch']);\r
把稳,纵然这些都安装好了,运行gulp命令的时候还是会报一个未定义babel工具的错,如图:
一开始我也不知道为什么,我把编译ES6的环境单独出来(也便是把react干系的内容和插件注释掉),创造是可行的。以是问题就出在编译react的时候了。终极在stackoverflow上面找到了答案。
大概的意思便是,babel在编译react的时候,有一个插件被分离了出来,须要其余安装,类似于补丁之类的东西吧!
按照上面这个说法,我又去安装了一下这个,创造真的可以了,不报错了^_^。至此,环境准备好了。
三、路由搭建
首先,你可以点击这里,对react-route有进一步的理解。
实在,只是搭建环境比教耗费韶光,搭路由参考官方的例子的话倒是很快的。我就写了一个hello world级别的路由。如下代码:
import React from 'react';\rimport ReactDOM from 'react-dom';\rimport { hashHistory, Route, Router } from 'react-router';\rimport { render } from 'react-dom'\r\rimport List from './list';\r\rclass Photo extends React.Component {\r render {\r return <p>hello, winty!</p>\r }\r}\r\rrender((\r <Router history={hashHistory}>\r <Route path=\"大众/\公众 component={Photo}/>\r {/ add the routes here /}\r <Route path=\"大众/list\公众 component={List}/>\r </Router>\r), document.getElementById('app'));\r
引入的List模块代码如下:
import React from 'react'\r\rclass List extends React.Component {\r render {\r return <div>hello,List</div>\r }\r}
正当我为写这么水的程序而不好意思的时候,打开浏览器,竟然。。。
真的就输出了hello,winty!
好吧。我F12打开掌握台的时候,很伤心,报了两个警告:
最伤心的是,我各种找资料,都没有找到阐明、各种群上问,都没有人知道的回答我。。。
好吧,抱着警告不影响运行的态度,我考试测验改变url,通过路由跳到list那里去。。。
然而。。。
结果又亮瞎了。。。
结果什么都没有,还报错了。。。容我悄悄啊。。。
于是我又一次各种查、各种查、各种问、各种问。。。
本来想问清楚了,再来写这个博客,然而。。。还是办理不了。。。于是只能到这里来乞助了。。。
博客园的大神们。。。有人可以阐明一下吗?
详细代码点这里!
PS:想练习ES6的新特性,又不知道该若何搭环境的人可以参考gulpfile的代码哦。。。