模块化
来源:互联网 发布:网站源码加密授权中心 编辑:程序博客网 时间:2024/05/01 00:16
1.CommonJS
(1) commonjs规范主要是针对于服务器端的,如node.js。
CommonJS module基本要求如下:
①require用来表示是一个函数,它仅有字符串参数,且要遵守Module Identifiers的规定,该方法返回指定的模块API
②如果存在依赖的其它模块,那么依次加载
③仅能使用标示符exports导出API
如:
var add=require('math').add; exports.increment=function(val){ return add(val,1); }
很多库支持AMD规范,如MooTools 、jQuery 、qwery 、bonzo
甚至还有 firebug
2.AMD和CMD
(全称:异步模块定义)是针对于浏览器端的规范,模块书写格式如:
define(function(require, exports, module) { var base = require('base'); exports.show = function() { // todo with module base }});
实现AMD的库有RequireJS 、curl 、Dojo 、bdLoad、JSLocalnet 、Nodules
等。 AMD、CMD
是用在浏览器端的,异步的;
CMD规范兼容了Commonjs规范和AMD规范;
define(function(require, exports, module){ var a = require('./a.js'); a.func(); require('./b.js'); b.func(); //对外提供接口 exports.func = {……} //或使用下面这种方式 module.exports = { …… }})
cmd和amd的区别:
1)amd是提前执行,cmd是延迟执行;
2)cmd推崇依赖就近,amd推崇依赖前置
3)amd的require分全局和局部,cmd没有全局require
3.requirejs 和 seajs
3.1 require.js
1)可解决的问题:实现js文件的异步加载,避免网页失去响应;
管理模块之间的依赖性,便于代码的编写和维护;
<script src="js/require.js" defer async="true" ></script> //加载主模块main.js <script src="js/require.js" data-main="js/main" ></script>
主模块main.js
(1) 加载顺序:’moduleA’, ‘moduleB’, ‘moduleC’是异步加载,默认它们是在同一个目录下,后面的回调函数是当前面指定的模块都加载成功后,才被调用。
require(['moduleA', 'moduleB', 'moduleC'], function (moduleA, moduleB, moduleC){ // some code here moduleA.add(1,1); });
(2)指定模块的加载路径
require.config({ baseUrl:"js/lib", paths:{ "A":"moduleA", "B":"moduleB", } })
(3)modeuleA.js写法
无依赖
define(function(){ var add = function(x,y){ return x + y; }; return{ add: add ; }})
(4)加载非AMD规范的库
require.config({ shim: { 'underscore':{ exports: '_' }, 'backbone': { //表明模块的依赖性 deps: ['underscore', 'jquery'], exports: 'Backbone' } } });
3.2 seajs
1.一个文件就是一个模块;
通过export暴露接口,通过require引入依赖;
define(function(require,export,module){ var util = require('./util.js'); util.dosomething(); //异步加载 require.async('./b',function(b){ b.dosomething(); }) //对外暴露接口 exports.init = function(){ }});
3.3 Requirejs与Seajs的区别
(1)定位不同:requireJS想成为浏览器、Rhino/Node等环境的模块加载器;而Sea.js则专注于web浏览器端;
(2)RequireJS遵循AMD(异步模块定义)规范,而Sea.js遵循CMD(通用模块定义)
(3)插件机制不同:RequireJS采取的是在源码中预留接口的形式,插件较单一;Sea.js采取的是通过事件机制,插件较丰富
(4)对开发调试的支持有差异:Sea.js 非常关注
a.js
//commonjsfunction funcA(){ console.log('hello webpack');}module.exports = funcA; //AMDdefine(function(){ function init(){ console.log('hello webpack'); } return{ init: init }});
b.js
var a = require('./a.js');//AMD方式进行加载require(["a"],function(){ a.init();})
- 模块化
- 模块化
- 模块化
- 模块化
- 模块化
- 模块化
- 模块化
- 模块化
- 模块化
- 模块化
- 模块化
- 模块化Java:静态模块化
- 软件模块化
- 模块化设计
- JS 模块化
- 模块化Java
- 模块化开发
- 模块化编程
- 2017年如何成为全栈工程师,这些技能是你必须具备的!
- angularjs fullpage全屏滚动插件
- JavaScript重新加载与刷新
- 停止收号标签
- VS调试启动"编辑并继续"功能
- 模块化
- 解决Http或Https中下载中文文件乱码和无法下载问题
- Python使用 time和datetime模块随意操作 时间
- Javascript 深入研究
- 使用web3.js编译Solidity之遇到的问题
- 3.Redis的数据结构
- 在不同的电脑环境有时无法访问mysql数据库
- [SMOJ2213]停车场
- springMVC 注解 @Autowired和@Resource 的关系