3

node.js 在遇到 var foo=require(../) 时会寻找哪些模块?

看起来它会从当前目录向上查找目录,但它究竟会查找和执行什么操作?

也许与 C 中的include或Python中的import有一个类比?

我一直从 node.js 开始阅读 http://nodejs.org/api/modules.html 并在 github 上找到了示例代码,例如

var express = require('express')
  , tracker = require('../')

这段代码似乎在使用 npm 安装 express 后分配 express 模块(文件)的变量express内容,其路径必须是全局的,这似乎可以理解,虽然我知道有两种类型的模块安装,但这是另一个问题。

但是变量跟踪器分配了哪些内容?

4

1 回答 1

9

这取决于该目录中的内容。

如果 X 以 './' 或 '/' 或 '../' 开头

一种。LOAD_AS_FILE(Y + X)
b. LOAD_AS_DIRECTORY(Y + X)

加载_AS_FILE(X):

  1. 如果 X 是文件,则将 X 作为 JavaScript 文本加载。停止
  2. 如果 X.js 是文件,则将 X.js 作为 JavaScript 文本加载。停止
  3. 如果 X.node 是一个文件,则将 X.node 作为二进制插件加载。停止

加载_AS_DIRECTORY(X):

  1. 如果 X/package.json 是一个文件,
    a. 解析 X/package.json,并查找“main”字段。
    湾。让 M = X + (json main field)
    c. LOAD_AS_FILE(M)
  2. 如果 X/index.js 是文件,则将 X/index.js 作为 JavaScript 文本加载。停止
  3. 如果 X/index.node 是一个文件,则将 X/index.node 作为二进制插件加载。停止
于 2012-09-27T15:37:14.863 回答