背景

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

    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...

  2. JSON和JSONP (含jQuery实例)(share)

    来源:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 前言: 说到AJAX就会不可避免的面临两个问 ...

  3. Android -- 自动完成文本框(可以匹配多个值,并以,结尾)

    1. 

  4. springboot+dubbo之多端口注入服务

    前面介绍了,springboot+dubbo基础整合,这篇介绍多端口注入服务. springboot使用@Bean注入dubbo服务,当你是单一的ProviderConfig实例,dubbo的@Ser ...

  5. 尝试封装适用于权限管理的通用API

    谈谈我对权限系统的简单理解 最近一段时间在研究权限系统,在园子里看到个很牛逼的开源的基于DDD-Lite的权限管理系统,并有幸加入了作者的QQ群,呵呵,受到了很大的影响.对于权限管理我有我自己的一些简 ...

  6. android中的回调简单认识

    首先说一下最抽象的形式--2个类,A类和B类.A类含有1个接口.1个接口变量.(可能含有)1个为接口变量赋值的方法以及1个会使用接口变量的"地方";B类实现A中的接口,(可能)含有 ...

  7. 一个人java深入理解java logback配置

    http://blog.csdn.net/initphp/article/category/1230072/2

  8. 【iCore3双核心板】发布 iCore3 硬件手册!

    百度网盘下载: https://pan.baidu.com/s/1jHZJCbW 博客园下载: http://files.cnblogs.com/files/xiaomagee/iCore3%E7%A ...

  9. LWL-Hitokoto API(一言-纯净API)

    著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:liwanglin12链接:https://blog.lwl12.com/read/hitokoto-api.html来源:L ...

  10. jQuery命名空间,插件开发

    jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...