# resolve与join的区别

2 min read
Table of Contents

在 nodejs 里面,resolve 与 join 都是常用的路径方法。

path.join([…paths])

path.join() 将所有给定的路径段连接在一起,然后对结果路径进行规范化。

path.join('/foo', 'bar', 'baz/asdf', 'quux', '..')
// Returns: '/foo/bar/bza/asdf'
path.join('foo/bar', 'baz')
// Returns: 'foo/bar/baz'

path.resolve([…paths])

path.resolve() 将一系列路径或路径段解析为绝对路径。

假设当前目录:/home/myself/node

path.resolve('/foo/bar', './baz')
// Returns: '/foo/bar/baz'
path.resolve('/foo/bar', '/tmp/file')
// Returns: 'tmp/file'
path.resolve('wwwroot', 'static_file/png', '../gif/image.gif')
// Returns: '/home/myself/node/wwwroot/static_file/gif/image.gif'
path.resolve()
// Returns: '/home/myself/node'
path.resolve(__dirname)
// Returns: '/home/myself/node'

__dirname 和 __filename

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

/Users/mjr
console.log(__dirname)
console.log(path.dirname(__filename))
// /Users/mjr

__filename 当前模块的文件名,当前模块的文件的绝对路径。

对于主程序而言,这不一定与命令中使用的文件名相同。

/Users/mjr/example.js
console.log(__filename)

注意:__filename 和 __dirname 是 CommonJS 模块的变量,在 ES 模块中无法使用。

不过我们可以通过 import.meta.url 实现类似的功能。

import { fileURLToPath } from 'url'
import { dirname } from 'path'
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)

process.cwd

process.cwd() 方法返回当前 nodejs 进程的工作目录

参考链接


More Posts

# 设计模式之备忘录模式

2 min read

备忘录模式,也叫快照(Snapshot)模式,英文名称是:Memento Design Pattern。在《设计模式》中的定义:在不违背封装原则的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便之后恢复对象为之前的状态。

# 回调函数

3 min read

回调函数是将一个函数作为参数传递给另一个函数,当外部函数被调用的时候可以执行一些回调函数。