背景

这篇文基本都是反对的,反对的很有道理,不是说我这篇文章的内容错误,因为这篇文章是我在健身房学习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

nodejs require//////////z的更多相关文章

  1. [one day one question] nodejs require 缓存,无法检测文件变化

    问题描述: nodejs require 缓存,无法检测文件变化,当文件require引入后,当文件发生变动后即使再次使用require,返回的依然是第一次引入的文件内容,这怎么破? 解决方案: de ...

  2. nodejs require

    The rules of where require finds the files can be a little complex, but a simple rule of thumb is th ...

  3. NodeJS require路径

    项目需要用nodejs,感觉nodejs是前端装逼神器了,是通向全栈工程师的必经之路哇,接下来开始踏上学习nodejs的征程.下面是第一个hello,world的程序. 1.server.js文件,这 ...

  4. nodejs -- require , exports , module

    1. require , exports . -------------------------- 文件: 1) index.js //两种方式都可以: var forExports = requir ...

  5. NodeJS require a global module/package in linux

    https://stackoverflow.com/questions/15636367/nodejs-require-a-global-module-package 1  export NODE_P ...

  6. require include 一个隐藏的用法:作用域。

    最近在研究php底层框架,奇怪的一点.控制器里为什么要把从model里获取的数据 需要$this->assign('items', $items); 这种形式模板文件里才可以调用到这个变量.控制 ...

  7. 正式学习React(一) 开始学习之前必读

    为什么要加这个必读!因为webpack本身是基于node环境的, 里面会涉及很多路径问题,我们可能对paths怎么写!webpack又是怎么找到这些paths的很迷惑. 本文是我已经写完正式学习Rea ...

  8. vue视频学习笔记03

    video 3 git page:任何仓库 master分支,都可以发布(git page)-------------------------------------双向过滤器:Vue.filter( ...

  9. vue视频学习笔记

    video 7 vue问题: 论坛 http://bbs.zhinengshe.com------------------------------------------------UI组件 别人提供 ...

随机推荐

  1. android Context 持有导致的内存泄漏

    Context使用场景 为了防止Activity,Service等这样的Context泄漏于一些生命周期更长的对象,可以使用生命周期更长的ApplicationContext,但是不是所有的Conte ...

  2. js学习

    2014-02-21 var p=function(){}(); //表示定义一个变量P,变量后面的函数为返回值 var p = function(){return 'abc';}(); alert( ...

  3. 移植tslib1.4至mini2440

    在移植tslib1.4至mini2440的过程中出现了一些问题,在解决问题的过程中也学到了不少东西.但是由于注意力不集中也导致了一些低级的错误,非常地浪费时间,以后在做事的时候必须集中注意力,宁愿慢一 ...

  4. Sublime Text 2配置文件详解

    Sublime Text 2是那种让人会一眼就爱上的编辑器,不仅GUI让人眼前一亮,功能更是没的说,拓展性目前来说也完全够用了,网上介绍软件的文章和推荐插件的文章也不少,而且很不错,大家可以去找找自己 ...

  5. Oracel EBS - Search Report by Response & Group

  6. 2016年终分析(传统开发与网络时代的Java开发)

    2016重大事件:(在此将2016年的开发称为传统开发) 1.乌镇互联网大会大会(大数据&云计算) 2.某东struts2安全漏洞 3.作为一个程序呀对于淘宝双11和双12的分析应该是最好的案 ...

  7. Windows 7 常用快捷键

    常用的快捷键 Win键+D 回到桌面/当前界面(切换)Win键+M 回到桌面Win键+E 资源管理器Win键+R 运行 Win键+U 控制面板->所有控制面板项->轻松访问中心 Win键+ ...

  8. java内置数据类型

    常量在程序运行时,不会被修改的量. 在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似: finaldouble PI =3.1415927; 虽然常量名也可以用小写,但为了便于识 ...

  9. amCharts图表组件

    amCharts提供了JavaScript/HTML5 Charts.Javascript/HTML5 Stock Chart.JavaScript Maps三种图表组件.amCharts图形效果炫丽 ...

  10. 多个Excel文件快速导入到DB里面

    1 . 文件比较多,需要把这么多的数据都导入到DB里面,一个个导入太慢了,能想到的是先把数据整个到一个Excel中,然后再导入 2. 第一步准备合并Excel,新建一个新的excel,命名为total ...