zoukankan      html  css  js  c++  java
  • Modules

    一、循环模块

      1、当存在循环的require()调用时,一个模块可能在返回时并不会被执行。  //只在第一次调用时会执行

    二、核心模块

      1、Node中有一些模块是编译成二进制的。

      2、核心模块定义在node源代码的lib/目录下。

      3、require()总是会优先加载核心模块。例如,require('http')总是返回编译好的HTTP模块,而不管是否有这个名字的文件。

    三、文件模块

      1、如果按文件名没有查找到,那么node会添加 .js.json后缀名,再尝试加载,如果还是没有找到,最后会加上.node的后缀名再次尝试加载。

      2、.js 会被解析为Javascript纯文本文件,.json 会被解析为JSON格式的纯文本文件. .node 则会被解析为编译后的插件模块,由dlopen进行加载。

      3、模块加载的两种方式:

    • 使用绝对(/)或相对(./)路径的文件
    • 从node_modules文件夹加载

    四、从node_modules文件夹中加载

      1、如果require()中的模块名不是一个本地模块,也没有以'/', '../', 或是 './'开头,那么node会从当前模块的父目录开始,尝试在它的/node_modules文件夹里加载相应模块。

      2、需要配置package.json文件  //json文件说明

      3、如果位于'/home/ry/projects/foo.js'的文件调用了require('bar.js'),那么node查找的位置依次为:

    • /home/ry/projects/node_modules/bar.js
    • /home/ry/node_modules/bar.js
    • /home/node_modules/bar.js
    • /node_modules/bar.js

         注:这就要求程序员应尽量把依赖放在就近的位置,以防崩溃。

    五、模块缓存

      1、模块在第一次加载后会被缓存。这意味着每次调用require('foo')的时候都会返回同一个对象。

      

      2、模块的缓存是依赖于解析后的文件名。由于随着调用的位置不同,可能解析到不同的文件(比如需从node_modules文件夹加载的情况),所以,如果解析到其他文件时,就不能保证require('foo')总是会返回确切的同一对象。

    六、其他

      1、require() 返回 module.exports,并且 module 是一个典型的只能在特定模块作用域内有效的变量,如果要使用它,就必须明确的导出。

      2、module.id:用于区别模块的标识符。通常是完全解析后的文件名。

      3、module.filename:模块完全解析后的文件名。

      4、module.loaded:module的加载状态。

      5、module.parent:引入该模块的模块.

      6、module.children:这个模块引入的所有模块对象。

      7、为了获取调用 require 加载的确切的文件名,使用 require.resolve() 函数。

      8、当 Node 直接运行一个文件时,require.main 就被设置为它的 module

      

      9、模块包的目录结构、依赖关系等(NPM)

    All rights reserved please indicate the source if reprint---吓尿了的大肥鼠
  • 相关阅读:
    阅读13-17章
    阅读<构建之法>10、11、12章
    作业5.2
    作业5.1
    作业四:构建之法的困惑和思考(5-7)
    做汉堡
    作业三:构建之法的困惑和思考(1-5)
    实验二 合作:王宏财 http://www.cnblogs.com/wanghongcai/
    实验一--四则运算
    数独九宫格
  • 原文地址:https://www.cnblogs.com/realsoul/p/5614009.html
Copyright © 2011-2022 走看看