使用6to5,让今天就来写ES6的模块化开发!

http://es6rocks.com/2014/10/es6-modules-today-with-6to5/?utm_source=javascriptweekly&utm_medium=email 原文链接

我之前在Twitter上发过一个照片,表达出我有多快乐,这像是一个时光机让我们可以穿梭到未来-ES6的时代!下面让我来展示如何使用6to5让今天就可以练手ES6的模块化。

使用6to5让今天就可以练手ES6的模块化

第一步

如果你现在还不了解ES6的模块化开发,请在JSModules.io上了解一下。我也推荐大家读一下@jcemer的文章A new syntax for modules in ES6,它涉及到了很多非常酷的关于JS模块化的东西。他可以指导我们使用6to5。总的来说,6to5能在支持ES5d的环境下提前尝试ES6
模块化开发的快感。 6to5比其他降级工具有一下几个优势: * 可读性:你的格式化的代码尽可能的保留。 * 可扩展性:有非常庞大的插件库和浏览器的支持。 * 可调式性:因为支持source map,你可以方便的调试已经编译过后的代码 * 高效率:直接转化为与ES相当的代码,不会增加额外的运行十几

一起来写模块

让我们来尝试着写模块吧! 我们的应用除了输出日志不会做其他事情,其主要的目的就是让你了解模块化如何工作和如何让你现有的环境使用ES6的模块化开发。 基本的目录结构:

├── Gruntfile.js
├── package.json
└── src
    ├── app.js
    ├── modules
    │   ├── bar.js
    │   ├── baz.js
    │   └── foo.js
    └── sample
        └── index.html

app.js是主程序,包含了我们将要存储的模块化的目录 下面是app.js的代码:

import foo from "./modules/foo";
import bar from "./modules/bar";

console.log(‘From module foo >>> ‘, foo);
console.log(‘From module bar >>> ‘, bar);

以上代码非常简单,我们导入了foo模块和bar模块,然后分别打印出他们

// foo.js
let foo = ‘foo‘;

export default foo;

// bar.js
let bar = ‘bar‘;

export default bar;

在这些模块一面我们只是导出了两个字符串’foo’和’bar’,当我们导入这些模块,我们的变量其实已经有数据。 当然,我们何以导出对象,类,函数,等等 现在,你可以开始模仿这个例子写出你自己的模块

构建

就像你已经知道的,ES6不支持你现在的浏览器和Node.js,只有一条路,那就是使用降级转换器来编写ES6的模块化代码。 正如我之前提到的那个,我使用6to5,他可以精确的达到我们想要的效果。 这个任务是运行在Grunt上的,我们使用 @sindresorhus的 grunt-6to5

npm install grunt-cli -g
npm install grunt --save-dev
npm install grunt-6to5 --save-dev

我们的Gruntfile类似于一下:

grunt.initConfig({
    ‘6to5‘: {
        options: {
            modules: ‘common‘
        },

        build: {
            files: [{
                expand: true,
                cwd: ‘src/‘,
                src: [‘**/*.js‘],
                dest: ‘dist/‘,
            }],
        }
    }
});

To test it in the browser, I made a copy task that just copies the sample/index.html file to our dist directory. The HTML file looks like this:

这是个简单又给力的配置,我们也几乎完成了。 当你指定好源文件和输出文件后,这个任务就可以来运行了。 ‘common’选项的目的在于告诉6to5我们将输出ES5CommonJS模块化风格。 当然,6to5也支持AMD,我写了sample/index.html,让他在浏览器环境下测试一下,这个HTML的代码如下:

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ES6 modules 6to5</title>
</head>
<body>
    <script src="//[cdnjs URL]/require.min.js"></script>
    <script>
        require([‘app.js‘]);
    </script>
</body>
</html>

观察上面的代码,我们使用AMD的RequireJS框架来加载这个JS,对于这个例子,你需要将上面的配置文件改为 modules: ‘amd’

运行

万事俱备东风只欠,我们的代码已经放在es6-modules-today-with-6to5,你可以克隆下来自己玩玩。使用npm install安装6to5

记住一点,Grunt任务会生成一个目标文件夹来存放转化后的代码 所以,如果你想测试使用CommonJS规范的转化后的ES6的代码,你可以执行一下命令

node dist/app.js

Node.js上的运行效果

如果你使用AMD规范的,请在浏览器访问index.html(吐槽一下,老外竟然不知道中国的sea.js)

在浏览器执行的效果

结论

通过这个简单的实例你学会了如果简单的使用ES6模块化风格来编写代码。6to5是胃肠棒的工具让你穿越到未来提前体验ES6模块化带来的快感。资源下载es6-modules-today-with-6to5,欢迎提交一些问题的反馈

文章来自 http://www.hacke2.cn

时间: 2024-12-14 19:51:55

使用6to5,让今天就来写ES6的模块化开发!的相关文章

js当中CommonJS 和es6的模块化引入方案以及比较

js当中CommonJS 和es6的模块化引入方案以及比较:https://blog.csdn.net/jackTesla/article/details/80796936 在es6之前,对于模块化方案主要是CommonJS和AMD两种.咱们这次说一下ES6和CommonJS的区别. 它们有两个重大差异: CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用.CommonJS 模块是运行时加载,ES6 模块是编译时输出接口.    第一个差异:    CommonJS 模块输

【OpenWRT】【RT5350】【二】烧写OpenWrt到RT5350开发板

烧写bin文件到开发板的方式有很多种,我采用的是通过web页面直接上传文件的方式 首先通过浏览器登陆路由器(192.168.1.1),作者的开发板已经烧好了OpenWrt并且可以通过Luci登陆,所以采用这种方式进行烧写,哈哈,其实就是更新个固件,比较简单,如果开发板没有烧写好OpenWrt,可以采用直接烧写flash的方式烧写程序,不过作者没有试过,所以不介绍这种烧写方式 打开luci的界面如下: 选择system==>Backup/Flash Fireware进入固件备份和更新界面 备份一下

ES6(Module模块化)

模块化 ES6的模块化的基本规则或特点: 1:每一个模块只加载一次, 每一个JS只执行一次, 如果下次再去加载同目录下同文件,直接从内存中读取. 一个模块就是一个单例,或者说就是一个对象: 2:每一个模块内声明的变量都是局部变量, 不会污染全局作用域: 3:模块内部的变量或者函数可以通过export导出: 4:一个模块可以导入别的模块 一.导入和导出 1.导出 导入: 结果: 2.只取需要的 结果: 3.导出数目太多时(无需一一对应) * 代表全部内容,as 代表别名 结果: 4.推荐写法 结果

我为什么要写《OpenCV Android 开发实战》这本书

我为什么要写<OpenCV Android 开发实战>这本书 2015年我出版了个人第一本关于图像处理方面的书籍<Java图像处理-编程技巧与应用实践>,这本书主要是从理论与编码上面详细阐述了图像处理基础算法以及它们在编码实现上的技巧.一转眼已经三年过去了,在这三年的时光里我无时无刻都在关注图像处理与计算机视觉技术发展与未来,同时渐渐萌发了再写一本图像处理相关技术书籍的念头,主要是因为<Java图像处理-编程技巧与应用实践>一书主要不是针对工程应用场景,读者在学完之后很

用 Webpack 和 ES6 转换快速开发 Rails 的富客户端

Fast Rich Client Rails Development With Webpack and the ES6 Transpiler 有更好的方式把 JavaScript 生态引入 Rails. 你有没有: 想知道是否有更好的方式在现有 Ruby on Rails 工程下使用现代 JavaScript 客户端框架? 烦恼怎样整合那些被打包成"模块"的 JavaScript 库和例子? 发现在全局命名空间下乱挂垃圾的弊端. 听说过 ES6 (又叫 Harmony),下一代 Jav

es6+require混合开发,兼容es6 module,import,export之 加载css及公用date-main

大家好!上篇文章已经介绍了搭建文件夹,以及加载js文件.现在讲一下加载css ,以及对baseUrl的理解 1.对项目结构的认知 一个项目的结构是根据项目的架构来决定的,当然也可以做到更智能,但是意义不大.下边看一下我的结构 我用到第三方库(js),未编译的es6代码(test),编译后的es5代码(src),样式表文件(css).项目中用到了require css.js用来加载css文件.                                                 安装插件

ES6系列之开发环境搭建

前言: 1.es6的简单介绍: ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在2015年6月正式发布了.它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言. 2.为什么要搭建ES6的开发环境? 因为至今各大浏览器厂商所开发的 JavaScript 引擎都还没有完成对 ES2015 中所有特性的完美支持,如果直接使用的话,会报错的.所以我们既想使用es6带来的新语法.新特性,又想让现在的浏览器支持es6

写给Android App开发人员看的Android底层知识(6)

(十一)BroadcastReceiver BroadcastReceiver,也就是广播,简称Receiver. 很多App开发人员表示,从来没用过Receiver.其实吧,对于音乐播放类App,用Service和Receiver还是蛮多的,如果你用过QQ音乐,App退到后台,音乐照样播放不会停止,这就是你写的Service在后台起作用. 在前台的Activity,点击停止按钮,就会给后台Service发送一个Receiver,通知它停止播放音乐:点击播放按钮,仍然是发送这个Receiver,

KoaHub.js:使用ES6/7特性开发Node.js框架(2)

    }       isLogin() {         console.log('base isLogin');     } }   //index controller, admin/controller/index.controller.js import base from "./base.controller"; export default class extends base{       constructor() {         super();