ES6的模块化import和export

还记得刚做前端的时候,那个时候都流行在页面底部引入几个js文件,然后就页面就屁颠屁颠跑起来了。

慢慢的,随着前端越来越复杂,和移动端的兴起,这样机械式的引用几个js文件的方式有些落伍了。

随后开始流行模块化开发,出现了sea.js和require.js这样的模块加载框架。

其实两个大同小异,sea.js遵循CMD规范,require.js遵循AMD规范,引入时候的写法有些区别,例如引入jQuery。

sea.js

var $ = require("jquery");
...

require.js

require(["jquery"],function($){
    ...
});

其实,我更喜欢require.js这种方式,毕竟JavaScript写多了,就比较习惯回调的这种方式

当时做这个博客的时候,就使用的是require.js,然后使用r.js打包模块文件,用着也挺开心的


其实用起来,两种都挺好用的,但是这毕竟不是JavaScript原生就支持的,都需要一个加载框架来做支撑

所以ES6就引入了自己的模块化解决方案,例如一个简单的例子

a.js

var name = "SweetsXob";
var sayHello = function(name){ alert("hello:"+name) };
export { name, sayHello}

b.js

import { name, sayHello } from './a';
sayHello(name)    //hello:SweetsXob

当然,这只是一个简单的例子,网上有更多更详细的教程

这些看似很美好,可惜的是,虽然标准是这样制定的,但是浏览器还是支持不了,需要使用一个叫babel的工具进行转换