WEB 十一月 17, 2021

node中__dirname与__filename的区别

文章字数 3.7k 阅读约需 3 mins.

先写个例子目录为E:\web\test\abc.js,其中abc.js为我们写的测试代码,在Node中./和process.cwd()效果相同,./有特殊情况
./就是执行node命令的路径,也就是工作路径,在哪运行的node index.js或者说在哪运行npm run build的路径 (特殊情况:在 require() 中使用 ./ 时,这时的路径就会是含有 require() 的脚本文件的相对路径。)

__dirname

dirname 总是指向被执行 js 文件的绝对路径,也就是说你在E:\web\test\abc.js中写dirname那么路径就是E:\web\test

__filename

返回当前模块文件被解析过后的绝对路径,使用filename变量获取当前模块文件的带有完整绝对路径的文件名,返回E:\web\test\abc.js(dirname等同于path.dirname(__filename))

process.cwd()

返回的是当前Node.js进程执行时的工作目录,保证了文件在不同的目录下执行时,路径始终不变,返回E:\web\test

path.join()

使用特定于平台的分隔符作为定界符将所有给定的 path 片段连接在一起,然后规范化生成的路径。

1
2
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..');
// 返回: '/foo/bar/baz/asdf'

path.resolve()

若字符以 / 开头,不会拼接到前面的路径;若以 ../ 开头,拼接前面的路径,且不含最后一节路径;若以 ./ 开头 或者没有符号 则拼接前面路径;

1
2
3
4
5
6
7
8
9
path.resolve('/foo/bar', './baz');
// 返回: '/foo/bar/baz'

path.resolve('/foo/bar', '/tmp/file/');
// 返回: '/tmp/file'

path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif');
// 如果当前工作目录是 /home/myself/node,
// 则返回 '/home/myself/node/wwwroot/static_files/gif/image.gif'

path.join()和path.resolve()区别

就是两个路径的拼接的API,废话不多说直接上代码,

示例E:\web\test\abc.js里面写:

path.join(__dirname,’/static/js’) 输出 E:\web\test\static\js

path.join(__dirname,’./static/js’) 输出 E:\web\test\static\js

path.join(‘/file’,’static’) 输出 file\static

path.resolve()中的/会被解析为根目录

path.resolve(‘/test’,’/static/js’) 输出 E:\static\js

path.resolve(‘/test’,’./static/js’) 输出 E:\test\static\js


参考:nodejs中文文档

0%