path.resolve与Node.js中的相对路径



我经常在节点中看到这样的例子:

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

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

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

来自文档:

当前模块的目录名。这与__filename的路径.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,这是错误的,因为您当前的目录是/

最新更新