//核心模块就是Node.js标准API种提供的模块,如fs,http,net.vm等.官方提供,编译成二进制代码
//核心模块拥有最高的加载优先级

//文件模块则是存储为单独的文件(或文件夹)的模块,可能是javascript代码,
//json或者编译好的C++代码.文件模块的加载方法相对复杂,尤其是和npm结合使用时,
//在不显式指定文件模块扩展名的时候,Node.js会分别试图加上.js  .json .node拓展名,
//js是javascript代码, .json是json格式的文本, .node 是编译好的C++代码

//6.1.2 按模块加载模块

//文件模块的加载2种方式,一个按照路径加载,一种是查找node_modules文件夹.
//如果require参数以"/" 开头,那么就以绝对路径的方式查找模块名称,require('/home/module')
//将会按照优先级依次尝试加载/home/module.js  /home/module.json /home/module.node

//如果require参数以"../  或者./  开头.那么则以相对路径的方式来查找模块.

//6.1.3 通过查找node_modules目录加载模块

//如果require参数不以 /  ./  ../  开头.而该模块又不是核心模块,那么要通过查找node_modules
//加载模块,  我们使用npm获取的包通常就是以这种方式加载的

//当require遇到一个既不是核心模块.又不是以路径形式标示的模块名称时,会视图在当前目录下的
//node_modules目录种查找是否存在这个模块,如果没找到,则在当前模块种的上一层种的node_modules
//目录种继续查找.

//我们要在  home/byvoid/develop/foo.js 种使用 require('bar.js') 命令
///home/byvoid/develop/node_modules/bar.js
///home/byvoid/node_modules/bar.js
///home/node_modules/bar.js
///node_modules/bar.js

//6.1.4 加载缓存
//  Node.js会通过文件名缓存所有加载过的模块.
 //require('express')  和  require('./node_modules/express')加载2次,
// 解析 也是同一个文件

//6.1.5 加载顺序
//   使用 require(some-module)时的加载顺序
//1)如果some_module是一个核心模块,直接加载,结束
//2)如果some_module是以/  ./ ../ 开头,按路径加载some_module结束.
//3)假设当前目录为current_dir ,按路径加载current-dir/node_modules/some_module
//             如果加载成功,结束
//              如果失败 ,令current-dir 为父目录
//             重复这个过程, 直到遇到根目录,抛出异常,结束

//6.2 控制流
//6.2.1 循环的陷阱
//

//6.3 Node.js应用部署
//Node.js 一旦被用户触发了隐藏的bug.整个服务器就崩溃了.一定要考虑到故障恢复
//没有日志
//无法利用多核提高性能  由于是单线程,一个进程只能利用一个cpu.当大量请求,单线程就成为瓶颈(需要多线程0)
//独占端口  ,要通过反向代理实现基于域名的端口共享
//需要手动启动, 要制作一个自动启动服务器的脚本

Node.js模块 加载笔记的更多相关文章

  1. nodejs js模块加载

    本文地址:http://www.cnblogs.com/jasonxuli/p/4381747.html nodejs的非核心模块(core module)加载主要使用的就是module.js. 项目 ...

  2. sea.js模块加载工具

    seajs的使用 seajs是一个jS模块加载器,由淘宝前端架构师玉伯开发,它可以解决命名空间污染,文件依赖的问题.可以在一个js文件中引入另外一个js.require('a.js') 1.安装 np ...

  3. js模块化/js模块加载器/js模块打包器

    之前对这几个概念一直记得很模糊,也无法用自己的语言表达出来,今天看了大神的文章,尝试根据自己的理解总结一下,算是一篇读后感. 大神的文章:http://www.css88.com/archives/7 ...

  4. js模块加载之AMD和CMD

    当我写这篇文章的时候,sea.js已经逐渐退出历史的舞台,详细链接.不过任何新事物的出现都是对旧事物的取其精华,去其糟粕,所以了解一下以前模块的加载也是一件好事. js模块化的原因自不比多说,看看HU ...

  5. 实现简单的 JS 模块加载器

    实现简单的 JS 模块加载器 1. 背景介绍 按需加载是前端性能优化的一个重要手段,按需加载的本质是从远程服务器加载一段JS代码(这里主要讨论JS,CSS或者其他资源大同小异),该JS代码就是一个模块 ...

  6. 【 js 模块加载 】深入学习模块化加载(node.js 模块源码)

    一.模块规范 说到模块化加载,就不得先说一说模块规范.模块规范是用来约束每个模块,让其必须按照一定的格式编写.AMD,CMD,CommonJS 是目前最常用的三种模块化书写规范.  1.AMD(Asy ...

  7. 【 js 模块加载 】【源码学习】深入学习模块化加载(node.js 模块源码)

    文章提纲: 第一部分:介绍模块规范及之间区别 第二部分:以 node.js 实现模块化规范 源码,深入学习. 一.模块规范 说到模块化加载,就不得先说一说模块规范.模块规范是用来约束每个模块,让其必须 ...

  8. js模块加载框架 sea.js学习笔记

    seajs实现了JavaScript 的 模块开发及按模块加载.用来解决繁琐的js命名冲突,文件依赖等问题,其主要目的是令JavaScript开发模块化并可以轻松愉悦进行加载. 官方文档:http:/ ...

  9. 第三课:sea.js模块加载原理

    模块加载,其实就是把js分成很多个模块,便于开发和维护.因此加载很多js模块的时候,需要动态的加载,以便提高用户体验. 在介绍模块加载库之前,先介绍一个方法. 动态加载js方法: function l ...

随机推荐

  1. Java父类子类的对象初始化过程

    摘要 Java基本的对象初始化过程,子类的初始化,以及涉及到父类和子类的转化时可能引起混乱的情况. 1. 基本初始化过程: 对于一个简单类的初始化过程是: static 修饰的模块(static变量和 ...

  2. 如何从硬盘安装fedora 19 (How to install fedora 19 from hard drive, Fedora-19-i386-DVD.iso)

    现在fedora 19出来了, 它的安装界面与跟fedora 18相同,都是metro UI. 不过现在官方已经不再推荐下载i386,而是x86-64位了,是不是现在x86-64已经把兼容性做得很好了 ...

  3. boost库在工作(32)网络服务端之二

    在这个例子里,服务器对象主要使用boost::asio::io_service对象,这个对象主要用来构造异步接收数据使用,接着定义boost::asio::ip::tcp::acceptor对象,这个 ...

  4. Ubuntu12.04安装hadoop

    1.      创建hadoop用户组和用户 a.  创建hadoop用户组 sudo addgroup hadoop b.  创建hadoop用户 sudo adduser –ingroup had ...

  5. JDK5-自动拆装箱

    拆装箱:在基本类型与其对应的引用类型之间转换 装箱:Integer iObj = 5; 拆箱:int i = 5 + iObj; 装箱时,一个字节以内的数据在一个常量池中(小整数的使用频率高),即-1 ...

  6. 《Android开发艺术探索》读书笔记 (11) 第11章 Android的线程和线程池

    第11章 Android的线程和线程池 11.1 主线程和子线程 (1)在Java中默认情况下一个进程只有一个线程,也就是主线程,其他线程都是子线程,也叫工作线程.Android中的主线程主要处理和界 ...

  7. oracle的sql优化

    http://www.cnblogs.com/rootq/archive/2008/11/17/1334727.html

  8. 洛谷 P1273 有线电视网(dp)

    /* 想了半天没想出状态 自己还是太弱了 QAQ 题目问的是最多供给多少户 一般想法是把这个值定义为状态量 没想出来QAQ....看了看题解的状态 很机智.... f[i][j]表示i的子树 选了j个 ...

  9. json 序列化和反序列化

    Json串的格式: string strDataDiyList={"id":"1","name":"zhangsan", ...

  10. webApp禁止用户保存图像

    img { -webkit-touch-callout: none; }