亲自操刀一波gulp如何兼容ES6 的实践,毕竟实践出真知。先百度一波gulp es6,拿到一堆命令。
// babel 依赖的包 但是看babel官方说并没有依赖这个如果不安装会报错 npm install babel-core --save-dev // 转码所需要的模板 npm install babel-preset-env --save-dev // babel转码的核心包这里安装7的版本如果不写默认安装8.0.0的版本 //但是在npm上看到的是最新版本是7的 如果安装了8的版本会一直报找不到babel-core的错误 npm install gulp-babel@7 babel-core --save-dev // 用非严禁模式编译 npm install babel-plugin-transform-remove-strict-mode --save-dev
然而
npm install babel-core --save-dev
这句命令就卡住下载不了,只能走淘宝镜像。后面就同样改用淘宝镜像,版本6.26.3
cnpm install babel-core --save-dev cnpm install babel-preset-env --save-dev //我漏了第三句命令导致后面出现的gulp-babel没找到 cnpm install gulp-babel@7 babel-core --save-dev
根据参考的文章步骤,在项目根目录下创建babel的配置文件.babelrc 文件。写入内容。
//.babelrc { "presets": [ [ "env", { "modules": false } ] ], "plugins": ["transform-remove-strict-mode"] }
但是看了下文章后面的描述,感觉目前的配置文件的modules:false和非严格模式不太适合layui,先试试只是env。
//.babelrc { "presets": [ [ "env" ] ] }
再修改gulpfile文件。
//gulpfile.js var babel = require("gulp-babel");//引入babel //原来的命令 gulp.src(src).pipe(uglify()) .pipe(header.apply(null, note)) .pipe(gulp.dest(destDir)); //修改后的命令 gulp.src(src) .pipe(babel()) .pipe(uglify()) .pipe(header.apply(null, note)) .pipe(gulp.dest(destDir));
开始尝试。
开始即是失败。认真看了下参考文章,补充执行漏掉的gulp-babel命令。执行完再次构建。这次成功完成命令了。不过测试的语句只是箭头函数,下面将es6的新写法都放到js文件中测试一下。
// 箭头函数 let f = a => a + 1; // 等价于 var f = function(a) { return a + 1; } // 模版字符串 let a = 'react' let s = `hello ${a}`; // hello react // 解构赋值 let [ lang, ...other ] = ['js', 'java', 'react']; // js , ['java', 'react'] // 扩展运算符 合并数组 let arr1 = ['a', 'a1']; let arr2 = ['b']; let newArr = [...arr1, ...arr2] // ['a', 'a1', 'b'] // 对象解构 let { person: {name, age}, foo } = { person : {name: 'tom', age: 4}, foo: 'foo' } console.log(name, foo, age) // tom , foo , 4 // 默认值 let t = (a = 1) => a + 2 t(2) // 4 t() // 3 let o = ''; let temp = o || 1 // 1 // map用法 arr1.map(item => ( item )) // filter arr1.filter(item => (item != 'a')) // a1 // swap 变量值交换 let foo = 1 let bar = 2 ;[foo, bar] = [bar, foo]
再次编译。
重复声明了,修改下测试的写法。把最后的foo修改成foo1。再次构建。正常编译,转换成功。再百度下ES6的新API的转换。需要使用babel-polyfill。这个是直接引入JS文件polyfill.js,当然了这个是浏览器不支持ES6的时候我们再引入,对gulp构建不影响,需要的时候就在layui中动态插入script标签引入或把polyfill.js修改成layui模块。
参考资料:https://blog.csdn.net/WU5229485/article/details/90177521