CNode

Nodejs自带的模块,路径是相对于运行时,还是引入的时候?

问答
AAmandaYi发布于9 年前最后回复9 年前10 回复5370 浏览0 收藏

比如,在一个file.js里面, 引入fs模块 然后, 其中的一个函数中有一条语句是 fs.readdir("某一个路径",(err, files)=>{

});

然后其他的文件调用这个文件,比如入口文件调用这个文件file.js 在index.js中写到

var file = require("./models/file.js"); 调用: file.上面友fs.readdir语句的函数, 那么, Nodejs自带的模块,路径是相对于运行时,还是引入的时候?

查看回复

回复 (10)

A
alwxkxk#1·9 年前

1.index.js引用file.js,file.js开始运行。 2.file.js运行时引用fs模块。 应该是这样。

M
mengdu#2·9 年前

读文件相对的是你是用函数的那个文件

来自酷炫的 CNodeMD

L
liuqipeng417#3·9 年前

a 引入 b,b 里的相对路径都是基于 a 的

S
sodawy#4·9 年前

模块引入时的路径解析,是require.resolve,情况很多建议仔细看下文档 fs中路径解析用的时类似path.resolve,基于cwd

二者规则是不同的。

前者,参考文档: require(X) from module at path Y 3. If X begins with './' or '/' or '../' a. LOAD_AS_FILE(Y + X) b. LOAD_AS_DIRECTORY(Y + X)

后者,基于process.cwd()为起点的,也就是你启动node时,所在的路径

建议多动手做下实验,加深理解

A
AmandaYi#5·9 年前
引用 alwxkxk1.index.js引用file.js,file.js开始运行。 2.file.js运行时引用fs模块。 应该是这样。

@alwxkxk 应该是这个样子啊? 我实验了下,和你的刚好相反

A
AmandaYi#6·9 年前
引用 liuqipeng417a 引入 b,b 里的相对路径都是基于 a 的

@liuqipeng417 主要存在一个问题,一个是内置模块, 一个是自建模块

A
AmandaYi#8·9 年前

自己找到答案,了 内建API模块,的 路径调用问题,都是以入口文件index.js为主,然后进行相对路径的,(考虑的情况是,node启动的时候刚好和入口文件index.js在同一个文件夹下面)

然后文件包含或者文件,都是书写的时候的相对路径是什么,然后通过url.resolve进行补全路径之后的绝对路径,之后直接调用

A
AmandaYi#10·9 年前

require()别的js文件的时候,将执行那个js文件。

注意: require()中的路径,是从当前这个js文件出发,找到别人。而fs是从命令提示符找到别人。 所以,桌面上有一个a.js, test文件夹中有b.js、c.js、1.txt a要引用b: 1 var b = require(“./test/b.js”); b要引用c: 1 var b = require(“./c.js”);

但是,fs等其他的模块用到路径的时候,都是相对于cmd命令光标所在位置。 所以,在b.js中想读1.txt文件,推荐用绝对路径: 1 fs.readFile(__dirname + "/1.txt",function(err,data){ 2 if(err) { throw err; } 3 console.log(data.toString()); 4 });

参与回复
登录后即可参与回复。登录