范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

使用Babel和Gulp将ES6模块转换为AMD和CommonJS

  ECMAScript 6(又名 ECMAScript 2015 或 ES6),下一个 JavaScript 版本的规范已经获得批准,浏览器供应商正在努力实现它。与之前版本的 ECMAScript 不同,ES6 对语言进行了大量更改,使其非常适合当今使用的规模。Sitepoint 有许多文章涵盖这些功能。
  虽然浏览器还没有实现所有的功能,但我们已经可以在开发过程中利用 ES6 并在发布应用程序之前将其转换为浏览器可以理解的版本。Babel和Traceur是用于此目的的两个主要转译器。Microsoft 的 JavaScript 类型化超集TypeScript也可以用作 ES6 转译器。
  我在之前的一篇文章中介绍了如何使用 ES6 来编写 Angular 1.x 应用程序。在那篇文章中,我使用 Traceur 的即时转译器来运行应用程序。虽然它可以工作,但最好提前进行转译并减少在浏览器中完成的工作量。在本文中,我们将看到如何将相同的示例应用程序转换为 ES5 并将模块转换为 CommonJS 或 AMD 使用 Babel 使其在当今的浏览器上运行。尽管该示例基于 Angular,但转译技术可用于任何有效的 ES6 代码。
  与以往一样,您可以在我们的 GitHub 存储库中找到本文随附的代码。 模块的重要性
  任何用于编写大型应用程序的语言的关键特性之一是能够以模块的形式加载应用程序的不同部分。模块不仅可以帮助我们保持代码更干净,而且还可以减少全局范围的使用。除非其他模块显式加载它,否则任何其他模块都无法使用模块的内容。
  模块的重要性不仅限于应用程序。即使是大型 JavaScript 库也可以利用模块系统将其对象导出为模块,并且使用这些库的应用程序可以根据需要导入这些模块。Angular 2 和Aurelia已经开始使用这个特性。
  如果您想快速了解在 ES6 中使用模块,请阅读:了解 ES6 模块 关于示例应用程序
  我们的示例应用程序的主题是一个虚拟书架。它由以下页面组成: 主页:显示可以标记为已读或移至存档的活动书籍列表。 添加书页:通过接受书名和作者姓名将新书添加到书架。它不允许重复的标题。 存档页面:列出所有已存档的书籍。
  该应用程序是使用 AngularJS 1.3 和 ES6 构建的。如果您查看文件app夹中的任何文件,您将看到用于从当前模块导出对象和从其他模块导入对象的关键字export和。import现在,我们的工作是使用Babel 的 Gulp 任务将这些模块转换为现有的模块系统之一。 但我没有使用 Angular。我只想将 ES6 模块转换为 CommonJS/AMD
  不用担心!我们为您提供保障。通过少量的调整,下面演示的配方可以用于任何涉及 ES6 模块的项目。Angular 在这里并不重要。 转换为 CommonJS
  CommonJS 是由CommonJS 组定义的模块系统。它是一个同步模块系统,其中模块使用函数加载并使用对象的属性require导出。默认情况下,该对象应在所有模块中可用。exportsmodulemodule
  Node.js 使用这个模块系统,因此它在module本地定义对象并使其可用于您的应用程序。由于浏览器没有定义这个对象,我们需要使用一个叫做Browserify的工具来填补这个空白。
  在开始之前,我们还需要安装一些 npm 包。这些将使我们能够将 Babel 和 Browserify 与 Gulp 结合使用,将我们的 ES6 模块转换为一种常见的模块格式,并将应用程序打包为单个文件供浏览器使用。 gulp-babel — 将 ES6 代码转换为原生 ES5 Browserify require("modules")   -通过捆绑所有依赖项让您在浏览器中 乙烯基源流- 直接处理 Browserify 模块,避免需要 gulp-browserify 包装器 乙烯基缓冲区- 将流转换为缓冲区(对于不支持流的 gulp-uglify 是必需的) gulp - uglify — 缩小文件 del — 让您删除文件和文件夹 gulp-rename — 一个让你重命名文件的插件
  您可以通过键入以下内容获得此批次: npm install gulp-babel browserify gulp-browserify vinyl-source-stream vinyl-buffer gulp-uglify del gulp-rename --save-dev
  现在让我们开始在我们的gulpfile.js. 我们需要编写一个任务来获取所有 ES6 文件并将它们传递给 Babel。Babel 中默认的模块系统是 CommonJS,所以我们不需要向 babel 函数发送任何选项。 var babel = require("gulp-babel"),     browserify = require("browserify"),     source = require("vinyl-source-stream"),     buffer = require("vinyl-buffer"),     rename = require("gulp-rename"),     uglify = require("gulp-uglify"),     del = require("del");  gulp.task("clean-temp", function(){   return del(["dest"]); });  gulp.task("es6-commonjs",["clean-temp"], function(){   return gulp.src(["app/*.js","app/**/*.js"])     .pipe(babel())     .pipe(gulp.dest("dest/temp")); });
  希望这里没有什么太令人困惑的地方。我们正在声明一个名为的任务 es6-commonjs,它会抓取 app 目录及其任何子目录中的所有 JavaScript 文件。然后它将它们通过 Babel 管道传输,Babel 又将单个文件转换为 ES5 和 CommonJS 模块,并将转换后的文件复制到dest/temp文件夹中。该 es6-commonjs任务有一个名为 的依赖项,它将在任务运行之前clean-temp删除dest目录和其中的所有文件。es6-commonjs
  如果你想让代码更明确并指定模块系统,你可以将 Babel 的用法修改为: .pipe(babel({   modules:"common" }))
  现在我们可以通过应用 Browserify 来从这些单独的文件中创建一个单独的捆绑文件,然后使用 uglify 包缩小输出。以下片段显示了这一点: gulp.task("bundle-commonjs-clean", function(){   return del(["es5/commonjs"]); });  gulp.task("commonjs-bundle",["bundle-commonjs-clean","es6-commonjs"], function(){   return browserify(["dest/temp/bootstrap.js"]).bundle()     .pipe(source("app.js"))     .pipe(buffer())     .pipe(uglify())     .pipe(rename("app.js"))     .pipe(gulp.dest("es5/commonjs")); });
  上面的任务有两个依赖:第一个是bundle-commonjs-clean删除目录的任务,es5/commonjs第二个是前面讨论过的es6-commonjs任务。一旦这些运行,任务将组合和缩小的文件app.js放在文件夹中es5/commonjs。该文件可以直接在中引用index.html,页面可以在浏览器中查看。
  最后,我们可以添加一个任务来启动: gulp.task("commonjs", ["commonjs-bundle"]); 转换为 AMD
  异步模块定义(AMD)系统,顾名思义,是一个异步模块加载系统。它允许多个依赖模块并行加载,并且在尝试加载其他模块之前不会等待一个模块完全加载。
  Require.js是用于与 AMD 一起工作的库。RequireJS 可通过 Bower 获得: bower install requirejs --save
  我们还需要用于 require.js 的 Gulp 插件来捆绑应用程序。为此安装gulp-requirejsnpm 包。 npm install gulp-requirejs --save-dev
  现在我们需要编写将 ES6 代码转换为 ES5 和 AMD 的任务,然后使用 RequireJS 将其捆绑。这些任务与 CommonJS 部分中创建的任务非常相似。 var requirejs = require("gulp-requirejs");  gulp.task("es6-amd",["clean-temp"], function(){     return gulp.src(["app/*.js","app/**/*.js"])     .pipe(babel({ modules:"amd" }))     .pipe(gulp.dest("dest/temp")); });  gulp.task("bundle-amd-clean", function(){   return del(["es5/amd"]); });  gulp.task("amd-bundle",["bundle-amd-clean","es6-amd"], function(){   return requirejs({     name: "bootstrap",     baseUrl: "dest/temp",     out: "app.js"   })   .pipe(uglify())   .pipe(gulp.dest("es5/amd")); });  gulp.task("amd", ["amd-bundle"]);
  要在 index.html 页面上使用最终脚本,我们需要添加对 RequireJS 的引用,即生成的脚本,然后加载bootstrap模块。bootstrap.js文件夹内的app文件引导 AngularJS 应用程序,所以我们需要加载它来启动 AngularJS 应用程序。    结论
  模块是 JavaScript 中一个姗姗来迟的特性。它们将在 ES6 中出现,但不幸的是,它们的原生浏览器支持目前很差。但是,这并不意味着您今天不能使用它们。在本教程中,我演示了如何使用 Gulp、Babel 和各种插件将 ES6 模块转换为可以在浏览器中运行的 CommonJS 和 AMD 格式。
  至于 ES6?ES6 自发布以来就在社区中引起了广泛关注。它已经被几个 JavaScript 库或框架使用,包括 Bootstrap 的 JavaScript 插件、Aurelia、Angular 2 和其他几个。TypeScript 还增加了对一些 ES6 特性的支持,包括模块。今天学习和使用 ES6,将减少将来转换代码所需的工作量。

重磅白宫宣布11月8日起取消旅游禁令完全接种可飞美国无需隔离美西时间10月15日,根据路透社报道,一位白宫官员说,白宫将于周五(10月15日)宣布从11月8日起取消对完全接种疫苗的外国公民的旅行限制,包括陆地边界和航空旅行。这一新政策对华人28亿存款质押案持续发酵渤海银行首度发声称储户知情济民可信回应会有公告财联社(北京,记者高萍)讯,济民可信28亿元存款莫名质押担保事件持续发酵。渤海银行南京分行今日就与济民可信的28亿存款质押风波首度接受媒体采访称,根据其了解到的信息,在一年左右的时港股异动半导体板块大涨华虹半导体大涨超6财联社(上海,编辑阿荣)讯,在港股市场上,半导体股走势跑赢大盘其中华虹半导体(01347)周五早盘上涨6。22,报46。95港元,而恒生指数下跌接近1。消息方面,隔夜美股芯片板块再过来人讲述入境被关小黑屋体验律师教你这样应对近日有报道称,数名来美就读的中国留学生在休斯敦机场入境时遭遇盘查,甚至有人被限制人身自由长达50多个小时,最终被无理遣返回国,中国驻美大使馆还为此发表了声明,督促中国赴美留学生谨慎宁德时代已启动钠离子电池产业化布局或与锂电共享产业发展红利宁德时代11月4日表示,在制造工艺方面,钠离子电池可以实现与锂离子电池生产设备工艺兼容,产线可进行快速切换,完成产能快速布局。目前公司已启动钠离子电池产业化布局,2023年将形成基11月5日完成首次报送!中证协要求券商报送量化数据,自营与资管填报各有细化要求,量化监管正加码财联社(上海,记者刘超凤)讯,继11月1日中基协发出通知,要求量化私募上报月度运行信息之后,中证协也加强对量化交易的监管力度,此次覆盖的是券商自营和资管业务。值得注意的是,中证协要iPhone13下月就来,还有这些重磅新品今年的八月已经过去了一半,对于科技数码爱好者们来说,又到数着日子等iPhone发布会的时候了。在公认的科技春晚这一天,库克会现身ApplePark,与诸位高管一同揭晓苹果打磨的最新无刘海真全面屏你理想中的iPhone已在路上iPhone上那道大刘海,一直是众人吐槽的重点对象。吐槽了将近四年的刘海屏,有的人还在继续吐槽,有的人已经渐渐习惯。但要说拿掉刘海,让iPhone屏幕再次完整,绝对是广大果粉的共同对冲基金大佬阿克曼ESG投资加剧了通胀美联储却不关注财联社(上海,编辑周玲)讯,美国对冲基金大佬比尔阿克曼(BillAckman)近日表示,ESG相关投资措施正助长通胀,但美联储对此并不关注。阿克曼是对冲基金潘兴广场(Pershin英国央行收紧货币的决心不足未能先于其他主要央行加息财联社(上海,编辑阿乐)讯,英国央行周四(11月4日)维持利率不变,先前市场预计该行将成为全球首个加息的主要央行。市场目前预计,在明年11月之前,英国央行将加息97个基点,低于本周如果你要买iPhone13,那就进来吧转自ZEALER时隔11个月,全新的iPhone13系列终于正式登场亮相。携手新款iPadAppleWatch,今年的加州来电信息量满满。早在发布之前,新一代数字在欧美文化的含义,
用户总是一次性消费,商家如何圈人圈心实现高效留存?相信很多实体店都遇到过类似的情况,那就是客户来了一次就不来了,客户留存难,那么面对这种情况该如何解决呢?一用户难留存的原因1品牌硬件条件差2产品的可替代性高3同行业竞争压力大4销售iDataJ16系列智能扫描枪用创新服务用户iDataJ16系列智能扫描枪。以往的扫描枪常常因为设置过程复杂,扫描性能不佳,导致工作效率的低下,iData提升了扫描性能的同时,并开发了智能交互系统,打造了全新的iDataJ1空军一号发现确诊病例,特朗普或将再劫难逃!美总统恐提前换届?空军一号发现确诊患者,特朗普将难逃一劫日前,新冠肺炎正在肆虐美国,美国总统特朗普已宣布全美进入紧急状态,他同时还要求联邦机构采取一切措施管控疫情,不难发现,美国的出台限籍令,引发娱乐圈震动,个别明星现极强的求生欲近期限籍令的出台,引发了国内娱乐圈的震动,一些外籍艺人在面对网友质疑讨伐时,不得不公开声明自己的立场,强调自己是中国人。明星的各持其词,无非是为自己正名,却反射出这些外籍明星强烈的新一轮限薪令开始!大牌明星抵制罢演,哪来的脸?娱乐圈一直流行这样一句话瘦死的骆驼比马大!管你是十八线外的小明星,你的收入相比普通人也要客观几百倍!更别说那些站在娱乐圈金字塔顶端的明星们,随便一部剧的片酬都是我们很多人一辈子都挣让人震惊第一个放水祸害全世界的居然是瑞典!瑞典是第一个向新冠肺炎疫情公开举手投降的欧洲国家,该国的这一最新政策无论对保护瑞典民众的健康还是对协同全球抗疫都是高度不负责任的。瑞典官方12日决定停止对新冠肺炎确诊病例的统计,该你赞同将三八妇女节改为女神节吗?最近,有人提议将三八妇女节改为女神节等名称,我个人觉得这是一种很不严肃的做法,我个人反对将妇女节改称为女神节女王节女生节,因为这是一种错误的尝试消解历史的政治阉割(抱歉我想不到更适肺炎不断扩散!美国正式通告全球,谁和亚洲大国合作制裁谁!就在全球肺炎不断扩散之际,美国正式通告全球谁和亚洲强国伊朗合作就制裁谁!3月21日据美国财政部消息,当地时间19日美国突然敲定制裁,宣布对阿联酋5家石油公司进行严厉制裁,包括冻结制外交部耿爽回答美国记者关于出口口罩的提问,点水不漏!以下为耿爽回答的全部内容外交部耿爽你(美国记者)提到的医用口罩以及生产口罩所需要原材料的出口问题,中国商务部此前已经做出过澄清,明确指出中国政府没有针对口罩及其生产原材料出口设置过美国霸气地向中国买口罩,我们该卖给他吗?美国国内疫情很严重,口罩严重不足,想从中国进口。就在刚刚,美国突然发布消息,对中国的口罩,医疗等物资降免关税!这一下网友纷纷炸开了锅。买个口罩都这么硬气!有人说坚决不卖,自己国内都特朗普我拒绝隔离检查,我只是有点发烧,没事!捂脸特朗普我拒绝隔离检查,我只是有点发烧,没事!捂脸现在包括加拿大总理夫人,NBA,意甲球星,汤姆汉克斯都被感染了,感觉现在欧洲和美国真的要沦陷了。这次的疫情对于全世界都是一次挑战,希