以下调用之间有什么区别吗?

path.join(__dirname, 'app')

与.

path.resolve(__dirname, 'app')

你应该选择哪一个?

推荐答案

这两个函数以非常不同的方式处理从/开始的段;join只会将其与上一个参数连接起来,然而resolve会将其视为根目录,并忽略所有之前的路径——将其视为对每个参数执行cd的结果:

path.join('/a', '/b') // Outputs '/a/b'

path.resolve('/a', '/b') // Outputs '/b'

另一件需要注意的事情是,path.resolve将始终生成一个绝对URL,并将使用您的工作目录作为解析此路径的基础.但是__dirname是一条绝对路径,无论如何,这对你来说并不重要.

至于你应该使用哪一个,答案是:这取决于你希望从/开始的片段如何表现——它们应该简单地连接起来,还是作为新的根?

如果其他参数是硬编码的,它真的不重要,在这种情况下,你应该考虑(a)这条线将来可能如何变化,以及(b)它与代码中的其他地方有多大的一致性.

Node.js相关问答推荐

AWS EC2 npm install 突然很慢

fs.writefile 选项参数的可能值,尤其是只读文件的整数

Cassandra node.js 驱动程序有替代品吗?

Electron 5.0.0“未捕获的 ReferenceError:未定义要求”

wasm 代码提交分配失败 - 进程内存不足

修复安装 NPM 包的upstream 依赖冲突

Node Sass 还不支持你当前的环境:Windows 64-bit with Unsupported runtime (88)

在 Node.js 中导入:错误“必须使用导入来加载 ES 模块”

发生未处理的异常:作业(job)名称“..getProjectMetadata”不存在

Node.js 12 的 TypeScript tsconfig 设置?

错误消息:MongoError: bad auth Authentication failed through URI string

try 将 DOMParser 与节点 js 一起使用

deno vs ts-node:有什么区别

UnhandledPromiseRejectionWarning:此错误源于在没有 catch 块的情况下抛出异步函数内部

Puppeteer - 向下滚动,直到你不能再

弃用警告:collection.findAndModify 已弃用.改用 findOneAndUpdate、findOneAndReplace 或 findOneAndDelete?

nvm: N/A: 版本“N/A -> N/A”尚未安装

Mongoose - 为什么我们在设置 mongoose 模块时使用“mongoose.Promise = global.Promise”?

create-react-app:如何使用特定浏览器“npm start”?

如何手动修复 npm 漏洞?