为什么在nodejs中使用path.resolve而不是相对路径?

问题描述

我经常在节点上看到以下示例:

process.env.GOOGLE_APPLICATION_CREDENTIALS = path.resolve(__dirname,'credentials.json')

我知道path是处理更复杂情况的有用模块,但是在这种情况下,为什么不使用

process.env.GOOGLE_APPLICATION_CREDENTIALS = './credentials.json'

解决方法

来自Documentation

当前模块的目录名称。这与__filename的path.dirname()相同。

这意味着在使用时:

process.env.GOOGLE_APPLICATION_CREDENTIALS = './credentials.json'

NodeJS将在当前工作目录中寻找credentials.json

使用此功能时:

process.env.GOOGLE_APPLICATION_CREDENTIALS = path.resolve(__dirname,'credentials.json')

NodeJS将在该模块所在的目录中寻找credentials.json

假设您具有这样的目录结构:

/
+-- home
|   +-- USERNAME
|       +-- project
|           +-- index.js
|           +-- credentials.json

如果您运行以下命令(从根目录/):

cd home/USERNAME/project
node index.js

代码在两种情况下都可以正常工作。

但是如果您这样运行

node home/USERNAME/project/index.js

使用path.resolve,您将获得:home/USERNAME/project/credentials.json是正确的

,没有它,您将得到./credentials.json,这是错误的,因为当前目录为/