# 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) 相同。
console.log(__dirname)console.log(path.dirname(__filename))// /Users/mjr__filename 当前模块的文件名,当前模块的文件的绝对路径。
对于主程序而言,这不一定与命令中使用的文件名相同。
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 进程的工作目录