JavaScript模块探索

随着JS项目越来越大,再依靠简单的命名空间来解决冲突不是很可取,项目大了之后不只有变量冲突的问题,还有模块依赖以及加载策略的问题等,这次就介绍现存的几种模块化、依赖的解决方案。

AMD

AMD规范起源于CommonJS的一个草案,由于没有达成一致所以后来就分道扬镳。

定义模块:

define(id?, dependencies?, factory);

http://requirejs.org/docs/api.html#define

使用模块:

require(id);

例子:

add.js

define(function(){    return function (a, b) {        return a + b;
    };
});

app.js

define(['./add'],function (add) {
    var sum = add(1,2);
    console.log(sum);});

define(function (require,exports,module) {
    var sum = 0;
    var add = require('./add');

    sum = add(1,2);
    console.log(sum);});

CommonJS

CommonJS规范因NodeJS而大放异彩。

定义模块:

并没有像AMD那种需要define包裹,一个文件就是一个模块。要导出模块则挂在到exports对象上即可。

使用模块:

require('moduleId');

add.js

exports.add = function(a,b){    return a + b;
}

app.js

var sum = 0;var plus = require('./add').add;//被引用的模块若是挂在exports上的则导出的是一个对象,所以需要指定到具体的方法,若模块是直接赋值给module.exports上的则不需要。sum = plus(1,2);console.log(sum);

相比于AMD格式,CommonJS格式简单、清爽、明了。

http://javascript.ruanyifeng.com/nodejs/module.html

CMD

定义、使用方法类似AMD,只是模块的执行时机和顺序不同。

具体参考:https://github.com/seajs/seajs/issues/242

ES6 module

ES6最具有意义的部分,有望成为浏览器和服务器通用的模块解决方案。

定义模块:

类似CommonJS,只不过导出是使用export。

使用模块:

import xx from 'xx'

add.js

export function add(a,b){    return a + b;
}

app.js

import {add} from 'add';var sum = 0;

sum = add(1,2);console.log(sum);

原文发布于微信公众号 - 前端黑板报(FeHeiBanBao)

原文发表时间:2016-10-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏王清培的专栏

后端服务性能压测实践

后端服务性能压测实践 标签(空格分隔): 性能 压测 后端服务 压测实践 作者:王清培(Plen wang) 背景 环境检测 压力机及压力工具检测 Linux...

7519
来自专栏ThoughtWorks

大型项目程序配置管理演化之路|TW洞见

今日洞见 文章作者、图片来自ThoughtWorks:窦衍森。封面图片来自网络。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司...

3356
来自专栏IT技术精选文摘

聊聊C10K问题及解决方案

1 C10K问题 大家都知道互联网的基础就是网络通信,早期的互联网可以说是一个小群体的集合。互联网还不够普及,用户也不多。一台服务器同时在线100个用户估计在当...

5569
来自专栏北京马哥教育

我所理解的性能测试是什么?

扯淡 首先说明这篇博客是文不对题的。起这个名字想法来源自韩寒的《我所理解的生活》,之前看过一个关于这本书的视频,感觉巨牛X,于是就想写一篇《我所理解的性能测试...

3809
来自专栏魏艾斯博客www.vpsss.net

lnmp1.4 环境升级 php5.5 到 php7 的过程

1.7K3
来自专栏Java架构沉思录

缓存在高并发场景下的常见问题

当数据时效性要求很高时,需要保证缓存中的数据与数据库中的保持一致,而且需要保证缓存节点和副本中的数据也保持一致,不能出现差异现象。这就比较依赖缓存的过期和更新策...

1304
来自专栏IT大咖说

分布式内存数据库新架构,极速OLTP应用新利器

内容来源:2018 年 11 月 10 日,Oracle 数据库首席产品经理杨琳在“2018 SOUG年度数据库技术峰会”进行《Oracle TimesTen ...

2172
来自专栏Golang语言社区

Golang - 调度剖析【第一部分】

首先,Golang 调度器的设计和实现让我们的 Go 程序在多线程执行时效率更高,性能更好。这要归功于 Go 调度器与操作系统(OS)调度器的协同合作。不过在本...

1342
来自专栏黑白安全

Memsniff:一款开源的Memcached流量分析工具

在<span "="">知名在线资源存储网站Box上,我们看到云服务已经经历了从一小撮应用服务器和数据库到高规格、高性能协作平台的转变。像大多数大型网络公司一样...

1113
来自专栏JavaEdge

Tomcat架构解析之1 架构简介1 核心架构模块说明2 分层建模3 作用域

3045

扫码关注云+社区

领取腾讯云代金券