标签:
- _filename:当前模块的文件名- _dirname:当前模块所在目录名-模块标识格式1符合小驼峰命名的字符串||以.、..开头的相对路径||绝对路径2可以没有文件名后缀-模块类型-.js-.node-.json-包结构-package.json;json格式文件,包描述文件- bin:目录,存放可执行二进制文件- lib:目录,存放Javascript代码- doc:目录,存放文档- test:目录:存放测试用例### AMD/require.js实现[AMD文档](https://github.com/amdjs/amdjs-api/wiki/AMD "AMD文档")-模块定义,使用require.js提供的全局函数define定义模块,define()接受三个参数```javascriptdefine(id?,dependences?,factory); define(function(){var exports ={};//需要定义模块入口变量 exports.fun1=function(){...}return exports;//需要将模块入口作为返回值}); define([‘myLib‘],function(myLib){function foo(){ myLib.doSomething();}return{ foo : foo};});- callback,回调函数,加载模块后执行,参数即为加载的模块对象### CMD/seajs实现[CMD文档](https://github.com/cmdjs/specification/blob/master/draft/module.md "CMD文档")-模块定义,使用sea.js提供的全局函数define定义模块,define()接受一个参数factory,factory有三种情况-函数:模块构造函数,默认有三个参数,require,exports,module,以形参的形式将上下文提供的变量引入当前模块的作用域供调用,还可以自己定义其他参数```javascript //变量和方法的挂载同commonJS,不能直接为exports赋值,因为exports是momule.exports的引用,改变exports的值不改变对象内容 define(function(require, exports, module) { ... });-字符串:可以用来定义字符串模板```javascript define(‘I am a template. My name is {{name}}.‘);javascript没有编译的过程,模块加载都是在代码执行过程中进行的,javascript模块都是独立的文件,,模块加载意味着需要读取文件
后端模块(nodejs)的加载默认采用同步加载,由于加载的文件都是在本地,而且nodejs提供了模块缓存机制,因此同步加载对性能影响不大
前端模块的加载需要进行网络请求,速度远不如加载本地文件,而且如果采用同步加载,且模块加载在UI初始化之前进行,则会对用户体验造成较大影响
从 CommonJS 到 Sea.js
javascript模块规范:CommonJS,AMD,CMD
标签:
原文地址:http://www.cnblogs.com/initial-wu/p/5349883.html