第2章{2-1什么是模块系统}

什么是模块系统

javascript维护之困

记得,刚来淘宝的时候,我维护的是淘宝收藏夹,那时候Kissy的还是1.1.6版本,没有模块系统,代码是1万4+,最开始是维护在1个文件,维护崩溃了,编写代码经常翻着翻着,不知道跑哪了。

后来,分成多个功能逻辑js文件,使用ant打包成一个文件,新的问题出现,调试非常麻烦,代码依旧缺乏约束性。

一刀切引入所有逻辑代码,无法按需加载,影响页面性能。

那是地雷满地、战火连天的年代,直到javascript模块系统诞生,KISSY1.2.0的发布,也搭上时代的列车。

CommonJS、AMD、CMD

CommonJSAMDCMD 三者的关系和区别,是前端经典的面试题目哦。

CommonJS是非常广泛的规范,包含了大量的内容,不止局限在浏览器端(比如Node.js),AMD、CMD都是其模块系统部分的子集,在CommonJS的wiki中找到践行CommonJS的javascript框架。

CommonJS 一个模块的代码 test.js:

var $ = require('jquery');
exports.test = function () {};

将 test 方法暴露给外部使用。

上面的代码明显没办法直接在浏览器端运行,所以就有了AMD 模块系统规范,可以保证模块文件可以在浏览器端正常执行。

RequireJS 就是AMD 模块系统规范的实现者:

define(['jquery'] , function ($) { 
    return function () {};
});

除了 AMD 还有 CDM 模块系统规范,SeaJs是其实现者:

define(function(require, exports) { 
    // 获取模块 a 的接口
    var a = require('jquery');
    exports.test = function () {};
});

相对于AMD,个人更推崇CMD规范,写法风格上更接近 CommonJS ,更接近 NodeJs 的写法。

KISSY的模块系统

KISSY的模块系统遵循的是KMD规范:

KISSY.add(function(S,Node){
    var $ = Node.all;
    return function(){};
},{requires:["node"]});

模块使用KISSY.add()包裹,现在已经不推荐使用该风格(Kissy文档和gallery存在大量KMD写法的代码,请无视),Kissy已经支持commonjs的风格:

KISSY.add(function(S,require,exports,module){
    var $ = require('node');
    exports.test = function () {};
}); 

 <!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>什么是模块系统</title>
    <script src="//g.alicdn.com/kissy/k/1.4.7/seed-min.js" charset="utf-8"></script>
</head>
<body>
<script>
    //定义一个模块
    KISSY.add('demo-mod',function(S,require,exports,module){
        var Node = require('node');
        var $ = Node.all;
        exports.test = function () {
            $('body').html('CommonJs');
        };
    });
    //使用模块
    KISSY.use('demo-mod',function(S,demo){
        demo.test();
    })
</script>
</body>
</html>

任务

CommonJS 是个好东西,推荐阅读其wiki




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值