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

使用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,将减少将来转换代码所需的工作量。

孟晚舟释放与否有重大意义?被无耻政治操弄的华为何时能得到清白最新一波中美贸易战已经经历了美国的两任总统,但仍然看不到有抵达终点的迹象。中兴华为字节跳动,都是被卷入其中的中国企业。其中尤以华为高管孟晚舟事件最为引人注目,从2018年底被扣之日把我关注的4只基金进行了对比,我发现了几个重点今天万万没想到下午逆势反转了。美团竟然在反垄断的影响下继续上涨,这和之前的阿里巴巴一个意思,利空出尽就是利好,不过后续还没出来。现在比较尴尬的是腾讯,也被反垄断影响着不上不下。长期AppleWatch6SE上架苹果官翻商城,价格只要八折近日,苹果官网官方翻新页面上架了去年新推出的AppleWatch6SE设备,相比官方全新设备要便宜不少。从官方翻新页面了解到,AppleWatch6的官翻价格最低为2699元,Ap特斯拉车顶维权女孩必将被载入数据资源立法的史册2021年4月19日,上海车展,一个身躯弱小的女子,穿了件白底红字的T恤,站在车顶,戳穿了科技巨头们的皇帝新装。特斯拉车顶维权事件,很多人没看清其本质,包括一些重量级的媒体(也许是特斯拉公布了数据,为什么反而引来更多的质疑?文连线出行,作者周雄飞,编辑子夜特斯拉不需要公关。本周三,高盛前高管GaryBlack在Twitter上以是否考虑雇佣一个公关人员?询问特斯拉CEO埃隆马斯克,后者以专注于产品为理喜马拉雅赴美IPO,2020年营收40。5亿,背后老板身家30亿文AI财经社周享玥编辑孙明屡次被传上市后,喜马拉雅终于IPO之路终于落下实锤。5月1日凌晨,在线音频平台喜马拉雅正式向美国证券交易委员会(SEC)提交了首次公开发行(IPO)申请,腾讯年薪75万的程序员竟比不上深圳普通中学老师的工资?近日,有网友在网络上晒出了一张深圳普通中学老师的工资单,秒杀大多数互联网的程序员们,引起大家的讨论。这个帖子一出,尤其是一想到对方还有寒暑假,让不少程序员羡慕不已虽然比不上208万实现真正全面屏!vivo公开全新折叠机专利近些年,近年各大手机厂商纷纷推出了折叠手机产品,连同今年小米终于将MIXFOLD等量产上市,不少业内人士预测2021年将会有更多的折叠手机新品亮相,折叠机的浪潮似乎越来越大。近日,新款特斯拉ModelS或将开始交付我们在今年2月份报道过特斯拉推出中期改款ModelS的消息,事实上这款车型至今还未交付。近日,在特斯拉2021年第一季度财报会议上,特斯拉表示新款的ModelS即将交付,但交付时间iPhone13mini渲染图6400万对角线双摄,正方形机身支持50W快充大家有没有想过,苹果的小屏幕旗舰手机的终极外观是什么样子的?iPhone12mini作为苹果首款尝试的小尺寸手机,发售之后由于设计方面的原因,消费者并不喜爱,甚至有传闻说iPhon2021年上半年新机大盘点,看看你最中意哪款?细数了一下今年上半年发布的新机!小米小米11,小米11Pro,小米11Ultra,小米10S小米11青春版,小米MIXFOLD红米红米K40,红米K40Pro,红米K40Pro,红
加密市场行情下挫,波卡逆势夺冠波动性牢牢地控制着市场,市场情绪进一步下降到中轨区域内。从加密市场情绪分析服务Omenics提供的数据来看,10个主要币种的综合移动7日平均加密市场情绪得分(sentscore)连永远相信美好的事情正在发生,小米11发布会米粉好幸福2020年对于小米来说确实是艰难奋发的一年,作为小米成立的第十个周年,小米10成了小米进军高端手机市场的一步好棋,小米一改以往中端机市场的品牌形象,开始向高端手机市场发力。就在12行业最顶级屏幕!旗舰机锁门员小米11全面升级,你还在嫌贵?近日,小米的新品发布会上,雷军携满满诚意带来了震撼全场的小米11。被米粉们称为弥补短板不惜一切代价打造出来的小米又一全新力作,小米11究竟价值几何?让我们来一起看一看。小米11的最雷军直播透露小米11,新款环保版热销高达两万台12月28日,万众瞩目的小米发布会开启,作为2020旗舰机收官之作小米11进入大众事业,为了此次的新品发售,小米集团可谓是用心良苦,无论是雷军一改往日低调在微博上为其造势,还是将发小米11强势来袭,超奢侈四曲面屏幕预约超百万,即将开售小米11的发布会在12月28日正式举行了,不得不承认小米11的成功震撼了在场的所有观众。2K画质120Hz高刷的屏幕,可以说是成本行业最贵的,屏幕素质远远超过苹果和三星,可见雷军不超酷!小米11终于来了,足够震撼,准备好了吗?12月28日晚,被受期待的小米11,终于发布了!小米11闪亮登场,赚足了大众眼球。正如外界期待,小米11在各个方面强大的性能,高端的配置,堪称王者,下面就来给大家分析一下。在手机屏CapitalMarkets认为苹果应该购买比特币投资银行RBCCapitalMarkets认为,苹果应该购买比特币,并推出加密交易所,这一言论是在今天早些时候特斯拉15亿美元购买比特币之后发表的。RBC表示,与苹果传闻中的电动汽DeFi基于数字ID的信用解决方案继ProBit交易所和EasyFi合作巩固当前中心化和去中心化金融之间的鸿沟之后,EASY继1月份上市之后,现在将在即将到来的ProBit专属莱特上亮相。ProBit交易所已经完成比特币是新的GameStop吗?从上周开始,GameStop就一直占据着全球新闻圈。一群千禧一代正在向价值数十亿美元的对冲基金开战,他们买入了这些对冲基金大量做空的股票,包括GameStopAMC和黑莓。GameDeFi会吃下摩根,但在吃这顿饭之前是有风险的去中心化金融(defi)协议估计将在十年或二十年内成长为高高在上的传统金融代替品,如美国主要投行摩根大通,但仍有一些特定的固有的风险需要处理。加密研究公司Messari的研究分析师Coinbase选择在纳斯达克直接上市经过几个月的猜测,总部位于旧金山的加密交易所Coinbase最近宣布计划通过直接上市。现在,TheBlock报道称,该公司将在纳斯达克上市。(Coinbase没有证实该报道)。Co