这篇文章最初发表在我自己折腾的博客站点上:使用gulp和bable实现实时编译ES6代码,该博客用了一位前辈开源的源码,基于thinkjs和vuejs开发,欢迎大家来逛逛。


问题描述
> 项目开发中使用了一个大而全的java框架,框架集成了前后端,前端在这个框架的基础上开发jsp页面,并未做到前后端完全分离。现在我们有些js代码使用了ES6的语法,但后来遇到了IE兼容性的问题,又不得不把代码转换到ES5,ES6的模板字符串是多么好用呀。唉~

> ### 自己尝试过哪些方法
> 目前简单配置了下babel,用到ES6的源码放在一个目录src,babel转译之后的代码放到一个目录dist,但每次改代码后转换都得手工敲命令,也挺麻烦。所以想问下对webpack比较熟的朋友,能不能通过webpack配合babel实现代码的自动编译,也就是“热更新”。但这里需要注意的是,不是打包,只是一堆js文件转译为另一堆js文件。

这个问题我首先百度了下未果,然后在segmentfault上求助如何使用webpack将es6代码热更新为es5代码?(注意不是打包),得到一位前端开发者的提醒,于是自己动手弄了下实现我的需求。基本过程如下:

用npm初始化项目,并创建代码输入和输出目录
此过程略,初始化完成后,主要是生成package.json,用来管理依赖。
创建两个目录,比如一个src是源文件目录,编写的js都放在这个目录中,另一个是dist目录,也就是babel转译后的目录,页面中也引用这个目录中的文件。

安装gulp和bable工具
1. 安装gulp

npm install --g gulp
npm install gulp --save-dev

2. 安装babel及相关插件

npm install -g babel-cli // 注意版本为6.xx
npm install babel-cli --save-dev
npm install babel-preset-env --save-dev //babel编译模板
npm install babel-plugin-transform-remove-strict-mode // 编译时移除全局严格模式

3. 安装gulp-babel插件,注意版本为7.xx,与babel版本有关,详细见[github](https://github.com/babel/gulp-babel)

npm install gulp-babel@ --save-dev 

4. 安装实时编译插件

npm install --save-dev gulp-watch

编写相应的配置文件
1. babel配置文件.babelrc
在项目根目录下新建该文件,并编写如下内容:

{
"presets": [ [ "env", { "modules": false } ] ], // 貌似这里的modules为false才可以识别this,在浏览器环境中有用
"plugins": ["transform-remove-strict-mode"]
}

2. gulp配置文件gulpfile.js

 var gulp = require("gulp"),
babel = require("gulp-babel"),
watch = require("gulp-watch"); gulp.task("babeljs", function() {
return gulp.src("src/*.js") // 输入目录
.pipe(babel())
.pipe(gulp.dest("dist/")); // 输出目录
});
gulp.task("watch", function() { // 实时监听
gulp.watch('src/*.js', ['babeljs']);
}); gulp.task('default', ['watch', 'babeljs']);

OK,最后一步
在项目根目录下,执行gulp,然后修改src下的js文件,你就会发现会被实时转译到dist目录中。

存在的问题
写代码时如果有语法错误,gulp的实时监控就会退出,所以,这个解决方法还是不够智能。

使用gulp和bable实现实时编译ES6代码的更多相关文章

  1. gulp 编译es6 react 教程 案例 配置

    1.gulp基本配置: var gulp = require('gulp'), watch = require('gulp-watch'), babel = require('gulp-babel') ...

  2. 前端自动化之sass实时编译及自动刷新浏览器

    gulp livereload实现sass实时编译及浏览器自动刷新 首先gulp是基于Node的,所以确保你已经安装 node.js,在Nodejs官方网站下载跟自己操作系统相对应的安装包. 先说一下 ...

  3. gulp实时编译less,压缩合并requirejs模块文件

    gulp的使用命令简单,就几个,gulp的简单使用教材可以参考一点的gulp使用教材(http://www.ydcss.com/archives/18). 下面就简单的介绍这些命令如何互相配合的完成前 ...

  4. gulp 编译es6 探究

    1.gulp配置: var gulp = require('gulp') var fs = require("fs") var babelify = require('babeli ...

  5. gulp.js实现less批量实时编译

    问题描述: 在之前一直用Koala编译less文件,但本人感觉Koala用起来非常麻烦,好像不能做多个less文件的批量的编译:因为目前项目也没有用到webpack,我的less是通过vs code ...

  6. gulp打包js多个文件夹并压缩混淆,编译ES6语法,及多个import依赖由一个入口打包成一个cdn

    感觉和webpack的步骤差不多 首先安装gulp:参考上一篇 安装完之后 新建一个文件目录起名 在当前目录下打开cmd 执行:npm init 创建package.json文件 然后安装第一个插件g ...

  7. 使用babel编译es6

    起因:开发中慢慢的学习使用es6,但是JavaScript需要浏览器来解析,而不是所有浏览器都支持es6,所以为了兼容es6,需要第三方工具进行编译es6. 工具:node,gulp,gulp-bab ...

  8. 使用caddy 进行nodejs web应用近实时编译更新

    caddy 相比nginx 是一个不错的轻量代理服务器,支持的功能也是比较多的, 同时插件也挺多 demo 测试的是通过git 插件进行一个使用spec-md 编写的文档近实时编译以及预览 项目使用d ...

  9. 原生小程序中实现将scss文件实时编译为wxss文件

    参考链接 全局安装gulp,方便以后直接执行gulp命令 npm install gulp -g 用原生小程序新建一个项目 在小程序根目录(app.js同级目录)中新建package.json文件 n ...

随机推荐

  1. JS的防抖,节流,柯里化和反柯里化

    今天我们来搞一搞节流,防抖,柯里化和反柯里化吧,是不是一看这词就觉得哎哟wc,有点高大上啊.事实上,我们可以在不经意间用过他们但是你却不知道他们叫什么,没关系,相信看了今天的文章你会有一些收获的 节流 ...

  2. 用animate改变了某个样式之后再用css控制会无效

    我前几天写了个移动端运动,(这个运动的代码我贴在这了:http://www.cnblogs.com/weiman/p/6600380.html)然后发现了这个问题,具体如下: 未运动前是这样的,菜单栏 ...

  3. 常见编码GBK、GB2312、UTF-8、ISO-8859-1的区别

    https://blog.csdn.net/shijing_0214/article/details/50908144 在项目开发中,会经常遇到不同的编码方式.不管什么编码,都是信息在计算机中的一种表 ...

  4. 微信小程序测试二三事

    微信小程序虽是微信推出的新形态的产品,但是在测试思路上跟其他的传统测试,大相径庭.既然大相径庭,那我们该如何测试呢. 功能测试功能测试跟传统的web功能测试一样,不是app的功能测试哦.这是因为小程序 ...

  5. ARP协议总结

    1.ARP用于实现ip和MAC地址之间的对应关系. 2.ARP的流程主要分为ARP请求.ARP应答.免费ARP. 3.首次ARP请求是广播报文,后续确认的ARP是单播报文. 4.免费ARP有两个用途, ...

  6. Vlc支持IE 360 低版本的Google浏览器

    VLC 插件代码: <object type='application/x-vlc-plugin' pluginspage="http://www.videolan.org/" ...

  7. fedora 28 安装 wine 运行 uTorrent 解决linux 端,pt 资源下载问题

    fedora 28 仓库中,资源比较多.使用 wine 运行windows 程序,可以一定程度上解决软件跨平台问题. 搜索: Last metadata expiration check: :: ag ...

  8. 【PAT】B1037 在霍格沃茨找零钱(20 分)

    #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int ...

  9. 如何轻松搞定 笔记本搜不到WIFI信号问题

    经常用电脑的同志肯定遇到过:一开机,发现右下角网络图标有个×号,wifi信号也搜不到:或者其他wifi信号能搜到,唯独自家的搜不到,是不是感觉很绝望啊,居然被wifi欺负到身上了,这也太憋屈了吧. 此 ...

  10. Spring boot + mybatis + orcale

    接着上次的实现, 添加 mybatis 查询 orcale 数据库 第一步: 新建几个必须的包, 结果如下 第二步: 在service包下新建personService.java 根据名字查perso ...