译-我是怎么在项目中使用ES6模块化的

译-我是怎么在项目中使用ES6模块化的

http://jsrocks.org/2015/05/how-i-m-using-es6-modules-in-production/原文链接

我使用ES6 modules工作已经有一段时间了,今天我就向大家分享下我是怎么使用ES6 moudule的。

首先,向大家介绍一下Babel ,Babel是用来JS转译的整合工具,它是一个非常活跃的项目,而且它几乎覆盖了所有现代JavaScript特征。(注:JS转译(Javascript Transpiler)请自行谷歌)

Babel完美支持模块化,你可以自己决定你代码的风格,你可以使用AMD,Common,UMD这些规范,而且你甚至能自定义模块规范。

在我的公司里,我们开发了一个基于AMD modules规范的框架(当然尚未开源),用来构建我们的应用。

相信我:对于开发大型的应用,使用AMD规范仍然是一个很好很好的解决方案。我们不能再把所有js代码反正一个文件里,这样是不行的。

悲剧的是我们现在很多些应用的解决方案是类似于Webpack,要想迁移到AMD modules可不是那么容易,而我们公司关于模块化的解决方案是很实用的(尚未开源)。

注:在本文中“解决方案”都是指JS模块化解决方案。

微模块策略

这个策略对我来说很有用。

正如我上文说的那样,我们最终产出模块必须要要是AMD module,但是当某一个AMD模块需要依赖其他模块时,我叫那个模块(AMD模块依赖的模块)叫做微模块。

微模块并不会被应用的每个模块都用到,但是利用它能帮助我们组织代码。

以下代码演示了我们怎么使用微模块:

微模块策略

这个策略对我来说很有用。

正如我上文说的那样,我们最终产出模块必须要要是AMD module,但是当某一个AMD模块需要依赖其他模块时,我叫那个模块(AMD模块依赖的模块)叫做微模块。

微模块并不会被应用的每个模块都用到,但是利用它能帮助我们组织代码。

以下代码演示了我们怎么使用微模块:

importconfig from'./config';//导入ES6模块import{ globalpkg } from'./config';//动态注入ES6模块参数importfactoryfrom'./factory'; zaz.use((pkg) => {"use strict";    config.dynamic.globalpkg = pkg;    pkg.require(['modFactory'], (modFactory) => {        modFactory.create(pkg.utils.deepMerge(config._static,factory));        });  });

我们在代码的顶部导入了一些模块,并且在我们的AMD模块里还使用了这些导入的模块。在其他的应用中并不会用到这些ES6模块,但是使用了这些微模块后,编译后产生的最终源码有更高的可读性。

这是config模块的代码:

constgithubURL ="OUR GITHUB URL HERE";conststaticServer ="http://s1.trrsf.com";consttestsPath =`zaz-${type}-${name}/tests/index.htm?zaz[env]=tests`;constname ="stalker";consttype="mod";constversion ="0.0.1";conststate ="ok";constdescription ="JavaScript API to deal with user data";letglobalpkg =null;// default exportconstconfig = {      _static: {          name,          version,          state,          description,          docs:`${githubURL}/pages/terra/zaz-${type}-${name}`,          source:`${githubURL}/Terra/zaz-${type}-${name}`,          tests:`${staticServer}/fe/${testsPath}`,          dependencies: ['mod.wilson']      }};exportdefaultconfig;

这是项目的源码结构:

└── src    ├── _js        ├── config.js├── environment.js├── helpers.js├── factory.js├── methods.js└── mod-stalker.js└── mod-stalker.js

我把一些AMD模块的逻辑放进了微小的ES6模块里。

这对于构建处理是很简单的:Babel转译ES6的Javascript代码为ES5的代码;使用导入CommonJS模块的方式来导入微模块。最后用Browserify打包代码。

哈哈!最终生成的代码符合AMD模块规范了。

下一步

Sourcemaps比起Browserify来说,Sourcemaps不能很好的处理这个编译的流程。

也许这里能有更好的实现方式。

我们现在可以开始使用ES6新特征和模块化来重构我们的框架了。

你甚至可以自己实现模块加载规范给你的程序,但是我认为这可能不是一个好方法,有可能你会需要完全重写现有的模块加载系统。

结论

现在模块规范已经完成了,而且是非常成熟和有效的。

然而,web浏览器至今没有提供js模块加载的原生API,所有像AMD或者CommonJS就显得格外重要了。

现在我们已经体会到ES6模块语法的好处了,可以让我们的代码拥有更高的可读性和简洁性。

现有的工具,比如Babel和Browserify能减少我们开发的痛苦,相信在不久的将来等ES6普及后,我们就能简化js开发流程,这样就能舍弃这些构建打包工具了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容