node学习笔记1——require参数查找策略
require参数类型
- http、fs、path等,原生模块
- ./mod或../mod,相对路径的文件模块
- /pathtomodule/mod,绝对路径的文件模块
- mod,非原生模块的文件模块
module paths
- 对于每一个被加载的文件模块, 创建这个模块对象的时候,这个模块便会有一个paths属性, 其值根据当前文件的路径计算得到, 如果当前的文件路径为:/Users/xxx/workspace/test.js, 这module.paths的结果如下:
[
'/Users/jiao/workspace/node_modules',
'/Users/jiao/node_modules',
'/Users/node_modules',
'/node_modules'
]
- 除此之外还有一个全局module path,是当前node执行文件的相对目录 (../../lib/node)。如果在环境变量中设置了HOME目录和NODE_PATH目录的 话,整个路径还包含NODE_PATH和HOME目录下的.node_libraries 与.node_modules
查找策略
- require() 通过分析文件路径和扩展名, 找到文件, 若失败, 但却得到一个目录, node会将目录作为一个包来处理
- 包分析:查找并解析package.json, 取出main属性指定的文件名进行定位, 如果文件缺少扩展名,将会进入扩展名分析的步骤, 否则查找该目录下的index(.js|.json|.node)文件;
- 如未果, 遍历module paths,逐个执行以上步骤
具体算法可以参考:node require.resolve() algorithm, 同时npmjs.org上的 https://www.npmjs.org/package/resolve 也实现来相同的算法功能
JS文件编译
Node.js在编译js文件的过程中实际完成的步骤有对js文件内容进行头尾包装。以app.js为例,包装之后的app.js将会 变成以下形式:
(function (exports, require, module, __filename, __dirname) {
console.log(module.paths);
});
node学习笔记1——require参数查找策略的更多相关文章
- golang学习笔记8 beego参数配置 打包linux命令
golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/mvc/contro ...
- node学习笔记(二)(ajax方式向node后台提交数据)
通过ajax向node后台提交数据过程(附手写前后台代码),并总结post与get的区别 POST 前台代码 //CSS简单给点样式 <style> form{ width: 200px; ...
- node 学习笔记 - Modules 模块加载系统 (1)
本文同步自我的个人博客:http://www.52cik.com/2015/12/11/learn-node-modules-path.html 用了这么久的 require,但却没有系统的学习过 n ...
- Node学习笔记 http
node url querystring 第二个参数指定分隔符 也可以指定三个参数,效果和两个参数类似 不同于querystring,下面是querystringfy的用法 queryescape与e ...
- node学习笔记第一天
ES6---* JavaScript语言随着使用的人越来越多,ECMA语法规范:if/else* 为了让js语言更适应大型应用的开发.旨在消除一些怪异的行为 ### 包含内容(strict严格模式)- ...
- Node学习笔记之模块实现
一.模块分类 由Node提供的模块,称为核心模块:部分核心模块在Node源代码的编译过程中,编译进了二进制执行文件.在node进程启动时,该部分就直接加载进内存,文件定位和编译执行的步骤可以省略掉,并 ...
- node 学习笔记 - path 处理
本文同步自我的个人博客:http://www.52cik.com/2015/12/04/learn-node-path.html path 模块是 node 用于整理.转换.合并路径的神器,只要是路径 ...
- node 学习笔记 - fs 文件操作
本文同步自我的个人博客:http://www.52cik.com/2015/12/03/learn-node-fs.html 最近看到群里不少大神都开始玩 node 了,我感觉跟他们步伐越来越大了, ...
- node学习笔记_04 express相册
学习node用express框架做了一个相册展示及上传功能: 1.没有连接服务器,这里全部是操作文件夹 2.安装上传文件的依赖formidable,npm install --save formida ...
随机推荐
- java方向及学习方法
随笔:由于回首最近刚刚上班的缘故,平时基本没时间上播客了,所以回首会定期的抽时间分享一些干货给朋友们,就是周期不会像之前那么频繁了.最近有朋友跟回首说想没事儿的时候自学Java,但苦于不知道怎么去学, ...
- Oracle学习笔记_07_模糊查询
附录:参考资料 1.Oracle sql语言模糊查询--like后面的通配符 2.oracle sql语言模糊查询--通配符like的使用教程
- js知识点图解
- 脚本全选全不选操作asp.net treeview控件
//树节点勾选(取消)上级自动全部勾选(取消)下级,勾选下级自动勾选上级,取消全部下级,自动取消上级 //事件响应函数 var HandleCheckbox = function () { //取得事 ...
- 最优化算法:BFGS算法全称和L-BFGS算法全称
在最优化算法研究中按时间先后顺序出现了许多算法包括如下几种,这里介绍下他们的全称和英文名称: 1.最速下降法(Gradient descent) 2.牛顿法(Newton method) 3. 共轭梯 ...
- Android手机通过APN设置上网的方法
今天一个朋友问了我关于android网络设置的问题,感觉还是挺有趣,特分享如下: 他是在香港买了一款LGP500的手机,系统是android系统,但是回来之后不能上网,于是在网上搜了很多资料,但是设置 ...
- Linux 多线程下载工具:axel
wget 应该是最常用的下载工具了,但是其不支持多线程下载. axel 安装 epel 源有 axel 的二进制包,可以使用 yum 安装. yum install epel-release yum ...
- .net core .net standard .net framework
由于对微软的技术比较感兴趣,所以最近就在研究用Visual Studio Code开发一个Asp.net core项目并且准备从后端开始干起. 一开始用dotnet new console创建了一个控 ...
- CSS Sprites使用
CSS Sprites在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢 ...
- 三栏布局之 css3 calc和 flex
圣杯布局的实现,有很多种. 大致都是借助 padding, margin, float之类的,当然这是传统的实现方式.更多的参考方式圣杯布局小结. 这里说的是用css3 cal 和flex来实现,因为 ...