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);

以上代码很easy,我们导入了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

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

  1. [译]使用6to5,让今天就来写ES6的模块化开发!

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

  2. ES6的模块化

    在之前的 javascript 中一直是没有模块系统的,前辈们为了解决这些问题,提出了各种规范, 最主要的有CommonJS和AMD两种.前者用于服务器,后者用于浏览器.而 ES6 中提供了简单的模块 ...

  3. es6的模块化编程

    es6的模块化编程 基本用法 es6 中新增了两个命令 export 和 import , export 命令用于规定模块的对外接口,import 命令用于输入其他模块提供的功能. 一个模块就是一个独 ...

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

    烧写bin文件到开发板的方式有很多种,我采用的是通过web页面直接上传文件的方式 首先通过浏览器登陆路由器(192.168.1.1),作者的开发板已经烧好了OpenWrt并且可以通过Luci登陆,所以 ...

  5. ES6(Module模块化)

    模块化 ES6的模块化的基本规则或特点: 1:每一个模块只加载一次, 每一个JS只执行一次, 如果下次再去加载同目录下同文件,直接从内存中读取. 一个模块就是一个单例,或者说就是一个对象: 2:每一个 ...

  6. ES6之模块化

    本文介绍ES6实现模块化的方法:使用import和export. 导入的时候需不需要加大括号的判断:1.当用export default people导出时,就用 import people 导入(不 ...

  7. 面试 11-01.ES6:模块化的使用和编译环境

    11-01.ES6:模块化的使用和编译环境 #前言 #ES6的主要内容 模块化的使用和编译环境 Class与JS构造函数的区别 Promise的用法 ES6其他常用功能 本文来讲"模块化的使 ...

  8. 模块化开发 | es6模块暴露与引入

    CommonJS模块开发 CommonJS定义 每个文件就一个模块,有自己的作用域.在一个文件里面定义的变量.函数.类,都是私有的,对其他文件不可见. 私有作用域不会污染全局作用域. 模块可加载多次, ...

  9. es6+require混合开发,兼容es6 module,import,export

    近一年,一直很忙,做了不少的项目,不过都不是太满意,毕竟是别人的作品,不好意思写出来.最近打算开发一个es6的项目,项目中用到require,本文主要讲解es6的module规范怎么与require的 ...

随机推荐

  1. Intellij Idea 12 开发Android 报Caused by: java.lang.UnsatisfiedLinkError: FindLibrary return null;

    这次开发是用的百度地图api,导入两个so文件,结果启动的时候总是报Caused by: java.lang.UnsatisfiedLinkError: findlibrary return null ...

  2. ViewPager 仿 Gallery效果

    xml: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android ...

  3. 1606: [Usaco2008 Dec]Hay For Sale 购买干草

    Description     约翰遭受了重大的损失:蟑螂吃掉了他所有的干草,留下一群饥饿的牛.他乘着容量为C(1≤C≤50000)个单位的马车,去顿因家买一些干草.  顿因有H(1≤H≤5000)包 ...

  4. 不可变String

    1,什么是不可变String? String对象是不可变的.当试图修改String值的时候,实际上都是创建一个全新的String对象,该对象包含修改后字符串的值,而最初的对象则没有发生改变. pack ...

  5. Hibernate映射之OneToOne(第二篇)

    这是在项目中实际遇到的一个问题,纠结了很久.一开始参考mkyong的 ,两边都写OneToOne ,后来查看了一下项目经理在原来一些模块中的写法. 学习一下: 首先是E-R图:  一个货品可以进行多次 ...

  6. LINQ to SQL大全

    LINQ to SQL语句 (1)之Where Where操作 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的 ...

  7. 时隔两年最近再次折腾opensuse 的一些笔记 - opensuse linux java service shell

    时隔两年最近再次折腾opensuse 的一些笔记 - opensuse linux java service shell opensuse 一些常用命令:    service xxx start/s ...

  8. C++11 并发指南后续更新

    C++11 并发指南的第一篇是 2013 年 8 月 3 号写的,到今天(2013 年 8 月 31 号)差不多一个月了,前前后后共写了 6 章(目前共 8 篇)博客介绍 C++11 的并发编程,但还 ...

  9. 【WPF】提高InkAnalyer手写汉字识别的准确率

    最近项目中需要用到一个手写键盘,我们使用了WPF的InkCanvas+InkAnalyer来开发. 按照文档,一般的代码写法如下: var analyzer = new InkAnalyzer(); ...

  10. [云] 1、云服务器——从ILP\DLP\TLP谈起

    1) ABOUT:ILP\DLP\TLP 1-1.ILP 大约在1985年之后的所有处理器都使用流水线来重叠指令的执行过,以提高性能.由于指令可以并行执行,所以指令之间可能实现这种重叠称为指令级并行( ...