path.resolve() 方法将路径或路径片段的序列解析为绝对路径。 给定的路径序列从右到左进行处理,每个后续的 path 前置,直到构造出一个绝对路径。 例如,给定的路径片段序列:/foo、 /bar、 baz,调用 path.resolve(‘/foo‘, ‘/bar‘, ‘baz‘) 将返回 /bar/baz。 如果在处理完所有给定的 path 片段之后还未生成绝对路径,则再加上当前工作目录。 生成的路径已规范化,并且除非将路径解析为根目录,否则将删除尾部斜杠。 零长度的 path 片段会被忽略。 如果没有传入 path 片段,则 path.resolve() 将返回当前工作目录的绝对路径。 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‘
简单的说,在 Node.js 中使用 fs 读取文件的时候,经常碰到要拼一个文件的绝对路径的问题 (fs 处理相对路径均以进程执行目录为准)。 之前一直的方法都是,使用 path 模块以及 __dirname 变量 。 代码如下所示: 1 fs.readFileSync(path.join(__dirname, ‘./assets/some-file.txt‘)); 使用 require.resolve 可以简化这一过程 示例代码: 1 fs.readFileSync(require.resolve(‘./assets/some-file.txt‘)); 此外, require.resolve 还会在拼接好路径之后检查该路径是否存在, 如果 resolve 的目标路径不存在, 就会抛出 Cannot find module ‘./some-file.txt‘ 的异常. 省略了一道检查文件是否存在的工序 (fs.exists). 这个报错并不会加重你的检查负担, 毕竟使用 fs 去操作文件时, 如果发现文件不存在也会抛出异常. 反之, 通过 require.resovle 可以在提前在文件中作为常量定义, 那么在应用启动时就可以抛异常, 而不是等到具体操作文件的时候才抛异常.
当前模块的目录名。 与 __filename 的 path.dirname() 相同。 示例,从 /Users/mjr 运行 node example.js: console.log(__dirname); // 打印: /Users/mjr console.log(path.dirname(__filename)); // 打印: /Users/mjr
当前模块的文件名。 这是当前的模块文件的绝对路径(符号链接会被解析)。 对于主程序,这不一定与命令行中使用的文件名相同。 有关当前模块的目录名,参阅 __dirname。 示例: 从 /Users/mjr 运行 node example.js: console.log(__filename); // 打印: /Users/mjr/example.js console.log(__dirname); // 打印: /Users/mjr 给定两个模块:a 和 b,其中 b 是 a 的依赖文件,且目录结构如下: /Users/mjr/app/a.js /Users/mjr/app/node_modules/b/b.js b.js 中的 __filename 的引用会返回 /Users/mjr/app/node_modules/b/b.js,而 a.js 中的 __filename 的引用会返回 /Users/mjr/app/a.js。
原文:https://www.cnblogs.com/lucy-xyy/p/11733266.html