zoukankan      html  css  js  c++  java
  • NodeJs:“require” 函数详解,懂这个你就懂NodeJs了

    背景

    这篇文基本都是反对的,反对的很有道理,不是说我这篇文章的内容错误,因为这篇文章是我在健身房学习node的时候写的,这些知识都很粗糙,后来发现官方的稳定更详细:地址:http://nodejs.org/api/modules.html

    一直想在服务器端使用一种语言,ruby、phthon和php也都学过,对于我来说使用这三种语言需要一定的上下文切换成本。正在我纠结的时候,NodeJs出现了,而且我自信对Javascript还是比较熟悉的,因此就准备学习一下NodeJs。这样我的语言组合为:C#、Javascript和NodeJs,全是C Style,几乎没有切换成本。

    NodeJs

    网上关于NodeJs的论述很多,此处不多说。个人认为,NodeJs的编程思想和客户端Javascript保持了一种理念,没有什么变化,只是增加了“require()”函数,因此只要学好require函数,剩下的问题就是如何更好的使用API了。

    require函数详解

    路径

      • 相对路径之当前目录:./xxx/xxx.js 或 ./xxx/xxx。
      • 相对路径之上级目录:../xxx/xxx.js 或 ../xxx/xxx。
      • 绝对路径:F:/xxx/xxx.js 或 /xxx/xxx.js 或 /xxx/xxx。

    require函数语法

    require(路径.扩展名):

    如果 路径.扩展名 存在

    执行加载 并 返回

    否则

    抛出异常

    require(路径):

    如果 路径.js 存在

    执行加载 并 返回

    如果 路径.node 存在

    执行加载 并 返回

    如果 路径/package.json 存在

    执行加载(package.json 中 main属性对应的路径) 并 返回

    如果 路径/index.js 存在

    执行加载 并 返回

    如果 路径/index.node 存在

    执行加载 并 返回

    抛出异常

    require(模块名字):

    如果 模块名字是系统模块

    执行加载 并 返回

    如果 require(./node_modules/模块名字) 能加载到模块  //参考require(路径)的介绍

    执行加载 并 返回

    如果 require(../node_modules/模块名字) 能加载到模块  //参考require(路径)的介绍

    执行加载 并 返回

    沿着目录向上逐级执行require(上级目录/node_modules/模块名字),如果能加载到模块  //参考require(路径)的介绍

    执行加载 并 返回

    抛出异常

    代码示例

    文件结果

     

    require_study.js中的代码

     1 require('module_1_1.js');
     2 require('module_1_2');
     3 require('../node_modules/module_2_1.js');
     4 require('../node_modules/module_2_2');
     5 require('../package_2_1');
     6 require('package_3_1');
     7 require('./node_modules/package_3_2');
     8 require('module_3_1');
     9 require('/node_study/level1/level2/level3/node_modules/module_3_1');
    10 require('module_3_2');
    11 require('/node_study/level1/level2/level3/package_3_3');
    12 require('./package_3_4');
    13 require('./module_3_3');
    14 require('same_name_module');
    15 require('same_name_package');
    16 require('same_name_module_and_package');

    输出结果

     1 module_1_1.js
     2 module_1_2.js
     3 module_2_1.js
     4 module_2_2.js
     5 package_2_1
     6 package_3_1
     7 package_3_2
     8 module_3_1.js
     9 module_3_2.js
    10 package_3_3
    11 package_3_4
    12 module_3_3.js
    13 same_name_module.js in leaf
    14 same_name_package in leaf
    15 same_name_module_and_package.js in leaf module

     代码下载:http://yunpan.cn/QWIiPxdZdW8RG

    备注

    刚接触NodeJs,还没有深入学习其API,包括我对require的理解,也不一定正确,欢迎批评和指正。关于require(模块名字),应该有一个全局查找路径,今晚我再查查资料。

    这篇文章说的更详细,早知官方有文章,我就不写了,文章地址:http://nodejs.org/api/modules.html

  • 相关阅读:
    我已经迷失在事件环(eventloop)中了【Nodejs篇】
    canvas练手项目(二)——各种操作基础
    canvas练手项目(三)——Canvas中的Text文本
    canvas练手项目(一)——选取图片
    迭代器,生成器(generator)和Promise的“微妙”关系
    通过HTTP的HEADER完成各种骚操作
    这份Koa的简易Router手敲指南请收下
    KOA的简易模板引擎实现方式
    扒一扒PROMISE的原理,大家不要怕!
    参考KOA,5步手写一款粗糙的web框架
  • 原文地址:https://www.cnblogs.com/happyframework/p/3064517.html
Copyright © 2011-2022 走看看