• 学习笔记:CommonJS规范、AMD规范


    CommonJS规范

    http://wiki.jikexueyuan.com/project/webpack-handbook/commonjs.html  CommonJS 规范

    http://www.cnblogs.com/littlebirdlbw/p/5670633.html  CommonJS规范

    CommonJS 是以在浏览器环境之外构建 JavaScript 生态系统为目标而产生的项目,比如在服务器和桌面环境中。

    这个项目最开始是由 Mozilla 的工程师 Kevin Dangoor 在2009年1月创建的,当时的名字是 ServerJS。

    2009年8月,这个项目改名为 CommonJS,以显示其 API 的更广泛实用性。CommonJS 是一套规范,它的创建和核准是开放的。这个规范已经有很多版本和具体实现。CommonJS 并不是属于 ECMAScript TC39 小组的工作,但 TC39 中的一些成员参与 CommonJS 的制定。2013年5月,Node.js 的包管理器 NPM 的作者 Isaac Z. Schlueter 说 CommonJS 已经过时,Node.js 的内核开发者已经废弃了该规范。

    CommonJS 规范是为了解决 JavaScript 的作用域问题而定义的模块形式,可以使每个模块它自身的命名空间中执行。该规范的主要内容是,模块必须通过 module.exports 导出对外的变量或接口,通过 require() 来导入其他模块的输出到当前模块作用域中。

    所有代码都运行在模块作用域,不会污染全局作用域;模块可以多次加载,但只会在第一次加载的时候运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果;模块的加载顺序,按照代码的出现顺序是同步加载的;

    在CommonJs规范中:
    一个文件就是一个模块,拥有单独的作用域;
    普通方式定义的变量、函数、对象都属于该模块内;
    通过require来加载模块;
    通过exports和modul.exports来暴露模块中的内容;

    NPM的模块加载机制:
    如果require的是绝对路径文件,查找不会去遍历每个node_modules目录,其速度最快
    1).从module.paths数组中(由当前执行文件目录到磁盘根目录)取出第一个目录作为查找基准
    2).直接从目录中查找该文件,如果存在则结束查找,如果不存在则进行下一条查找
    3).尝试添加.js、.node、.json后缀之后查找,如果存在文件则结束查找,如果不存在则进行下一条查找
    4).尝试将require的参数作为一个包来进行查找,读取目录下的package.json文件,取得Main参数指定的文件
    5).尝试查找该文件,如果存在则结束查找,如果不存在则进行第3条查找
    6).如果继续失败,则取出module.paths数组中的下一目录作为基准查找,循环第1-5个步骤
    7).如果继续失败,循环第1-6个步骤,直到module.paths中的最后一个值
    8).如果继续失败,则抛出异常


    AMD规范

    http://wiki.jikexueyuan.com/project/webpack-handbook/amd.html


    AMD(异步模块定义)是为浏览器环境设计的,因为 CommonJS 模块系统是同步加载的,当前浏览器环境还没有准备好同步加载模块的条件。

    AMD 定义了一套 JavaScript 模块依赖异步加载标准,来解决同步加载的问题。

    模块通过 define 函数定义在闭包中


     阅读:

    http://blog.csdn.net/xcymorningsun/article/details/52709608  理解AMD ,CMD,CommonJS规范

    http://blog.csdn.net/vin1992/article/details/60870040  彻底弄懂CommonJS和AMD/CMD

    ..

  • 相关阅读:
    .Net自动生成Html新闻系统V1.0 Beta 下载
    Visual Studio .NET 2003中自己找到的一个小技巧[图]
    多表连接的SQL写法(SqlServer、Oracle)
    在线人数统计 V1.0(Asp.net+ SqlServer) 源码下载
    Visual Studio 2005安装后,原来的Asp.net1.1不能执行的解决方法。
    [函数]截取固定长的字符串(双字节的计2位)
    [原创]asp.net 2.0下的自定义树(myTreeView)
    通用的数据库操作助手类
    关于时间国际化的方案
    HTTPS Cipher Suite问题
  • 原文地址:https://www.cnblogs.com/qq21270/p/7524051.html
Copyright © 2020-2023  润新知