gulp 如何运用 babel 来打包项目中 es6 的新特性

2024-04-29 08:18

本文主要是介绍gulp 如何运用 babel 来打包项目中 es6 的新特性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

什么是 babel ? 在前端项目中他能做什么了?

Babel 是一个工具链,主要用于在当前和旧的浏览器或环境中,将 ECMAScript 2015+ 代码转换为 JavaScript 向后兼容版本的代码。以下是 Babel 可以做的主要事情:

  • 转换语法
  • 源代码转换(codemods)

简而言之,在前端开发过程中,大家会用很多 es6 的新特性,比如箭头函数、class、解构、Promise、async / await等。这些新的特性,简洁的语法、强大的功能,就好比给前端程序员插上了一对自由自由翱翔翅膀,极大的增强了开发效率,代码可读性等。虽然好,但这些新特性并不能在浏览器上正常解析,这样 babel 就显得至关重要。他能帮助我们把这些新特性转换成浏览器识别的代码。下面我们来一起学习,该如何做才能让我们能插上这对自由自由翱翔翅膀 。

一、安装所需要的依赖模块

// 准备
npm install -g gulp // 全局安装 gulpmkdir gulp-demo // 新建一个项目目录
cd gulp-demo // 进入目录
npm init -y // 初始化项目

进入正题(注意:下面我们用的是新版的 babel)

npm install --save-dev gulp gulp-babel @babel/core @babel/preset-env

二、配置 gulp 任务

根目录新建 gulpfile.js

const gulp = require('gulp');
const babel = require('gulp-babel');gulp.task('default', () => {return gulp.src('src/main.js').pipe(babel({presets: ['@babel/preset-env']})).pipe(gulp.dest('dist'))
})

根目录新建 src/main.js

const add = (x, y) => {return x + y
}console.log(add(1, 2));

执行 gulp 命令 dist 目录下就会有转换好的代码

"use strict";
var add = function add(x, y) {return x + y;
};console.log(add(1, 2));

到这里一个基本转换 es6 语法的工程都搭建完了,是不很简单?是的,就是这么简单。下面我们来试试 export、import、class 等这些语法是否也已经支持了?我们一起来修改一下 main.js 代码

// main.js
import { add } from './math';
import Calculate from './calculate';console.log(add(1, 2));
const obj = new Calculate(2, 3)
console.log(obj.add());// calculate.js
class Calculate {constructor(x, y) {this.x = x;this.y = y;}add() {return this.x + this.y}
}export default Calculate;// math.js
export const add = (x , y) => {return x + y;
}

执行 gulp 命令 dist 目录下就会有转换好的代码

"use strict";var _math = require("./math");var _calculate = _interopRequireDefault(require("./calculate"));function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }console.log((0, _math.add)(1, 2));
var obj = new _calculate["default"](2, 3);
console.log(obj.add());

上面代码很明显是不被浏览器给支持的,那该怎么办了?其实这 gulp 自身就做不到了,必须借助一些其它模块来完成这项工作。比如: webpack 、browserify,下面我们来看看 webpack 怎么帮我们做到转换 模块化及class语法:

npm i --save-dev webpack-stream

gulpfile.js

const gulp = require('gulp');
const babel = require('gulp-babel');
const webpack = require('webpack-stream');gulp.task('default', () => {return gulp.src('src/main.js').pipe(babel({presets: ['@babel/preset-env']})).pipe(webpack({output: {filename: 'main.js'}})).pipe(gulp.dest('dist'))
})

这样我们来执行一下 gulp ,会给我们怎样的惊喜。

!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){"use strict";r.r(t);var n=class{constructor(e,t){this.x=e,this.y=t}add(){return this.x+this.y}};console.log(1+2);const o=new n(2,3);console.log(o.add())}]);

代码经常 js 混淆,可能不太意看懂,能不能在浏览器上执行,同学们可以放到浏览器上试试就知道了。

源码下载请移步

这篇关于gulp 如何运用 babel 来打包项目中 es6 的新特性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/945568

相关文章

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙

禁止HTML页面滚动的操作方法

《禁止HTML页面滚动的操作方法》:本文主要介绍了三种禁止HTML页面滚动的方法:通过CSS的overflow属性、使用JavaScript的滚动事件监听器以及使用CSS的position:fixed属性,每种方法都有其适用场景和优缺点,详细内容请阅读本文,希望能对你有所帮助... 在前端开发中,禁止htm

将java程序打包成可执行文件的实现方式

《将java程序打包成可执行文件的实现方式》本文介绍了将Java程序打包成可执行文件的三种方法:手动打包(将编译后的代码及JRE运行环境一起打包),使用第三方打包工具(如Launch4j)和JDK自带... 目录1.问题提出2.如何将Java程序打包成可执行文件2.1将编译后的代码及jre运行环境一起打包2

Vue3中的动态组件详解

《Vue3中的动态组件详解》本文介绍了Vue3中的动态组件,通过`component:is=动态组件名或组件对象/component`来实现根据条件动态渲染不同的组件,此外,还提到了使用`markRa... 目录vue3动态组件动态组件的基本使用第一种写法第二种写法性能优化解决方法总结Vue3动态组件动态

spring-boot-starter-thymeleaf加载外部html文件方式

《spring-boot-starter-thymeleaf加载外部html文件方式》本文介绍了在SpringMVC中使用Thymeleaf模板引擎加载外部HTML文件的方法,以及在SpringBoo... 目录1.Thymeleaf介绍2.springboot使用thymeleaf2.1.引入spring

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

golang内存对齐的项目实践

《golang内存对齐的项目实践》本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下... 目录一、结构体中的字段顺序与内存对齐二、内存对齐的原理与规则三、调整结构体字段顺序优化内存对齐四、内

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

CSS弹性布局常用设置方式

《CSS弹性布局常用设置方式》文章总结了CSS布局与样式的常用属性和技巧,包括视口单位、弹性盒子布局、浮动元素、背景和边框样式、文本和阴影效果、溢出隐藏、定位以及背景渐变等,通过这些技巧,可以实现复杂... 一、单位元素vm 1vm 为视口的1%vh 视口高的1%vmin 参照长边vmax 参照长边re