统一企业信息管理系统网站,做电商什么外推网站好,绥德网站建设设计,网站百度推广方案Node 中的文件路径大概有 __dirname, __filename, process.cwd(), ./ 或者 ../#xff0c;前三个都是绝对路径#xff0c;为了便于比较#xff0c;./ 和 ../ 我们通过 path.resolve(./)来转换为绝对路径。
先看一个简单的栗子#xff1a;
假如我们有这样的文件结构#xf…Node 中的文件路径大概有 __dirname, __filename, process.cwd(), ./ 或者 ../前三个都是绝对路径为了便于比较./ 和 ../ 我们通过 path.resolve(./)来转换为绝对路径。
先看一个简单的栗子
假如我们有这样的文件结构
app/-lib/-common.js-model-task.js-test.js在 task.js 里编写如下的代码
var path require(path);console.log(__dirname);
console.log(__filename);
console.log(process.cwd());
console.log(path.resolve(./));在 model 目录下运行 node task.js 得到的输出是
/Users/guo/Sites/learn/app/model
/Users/guo/Sites/learn/app/model/task.js
/Users/guo/Sites/learn/app/model
/Users/guo/Sites/learn/app/model然后在 app 目录下运行 node model/task.js得到的输出是
/Users/guo/Sites/learn/app/model
/Users/guo/Sites/learn/app/model/task.js
/Users/guo/Sites/learn/app
/Users/guo/Sites/learn/app那么不好意思不是问题来了~T_T,我们可以得出一些肤浅的结论了
__dirname: 总是返回被执行的 js 所在文件夹的绝对路径__filename: 总是返回被执行的 js 的绝对路径process.cwd(): 总是返回运行 node 命令时所在的文件夹的绝对路径./: 跟 process.cwd() 一样、一样、一样的吗
我明明记得在 require(../lib/common) 里一直都是各种相对路径写也没见报什么错啊我们还在再来个栗子吧还是上面的结构model/task.js 里的代码改成
var fs require(fs);
var common require(../lib/common);fs.readFile(../lib/common.js, function (err, data) {if (err) return console.log(err);console.log(data);
});在 model 目录下运行 node task.js一切 Ok没有报错。然后在 app 目录下运行 node model/task.js然后很果断滴报错了:那么这下问题真的都是来了按照上面的理论在 app 下运行时../lib/common.js 会被转成 /Users/guo/Sites/learn/lib/common.js这个路径显然是不存在的但是从运行结果可以看出 require(../lib/common) 是 OK 的只是 readFile 时报错了。
那么关于 ./ 正确的结论是
在 require() 中使用是跟 __dirname 的效果相同不会因为启动脚本的目录不一样而改变在其他情况下跟 process.cwd() 效果相同是相对于启动脚本所在目录的路径。
三、总结
只有在 require() 时才使用相对路径(./, ../) 的写法其他地方一律使用绝对路径如下
// 当前目录下
path.dirname(__filename) /test.js;
// 相邻目录下
path.resolve(__dirname, ../lib/common.js);四、参考链接
What is the difference between __dirname and ./ in node.jsnodejs API路径处理模块path总结