12node常用模块new

path.resolve([...paths])

      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'
  

require.resolve

      简单的说,在 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 可以在提前在文件中作为常量定义, 那么在应用启动时就可以抛异常, 而不是等到具体操作文件的时候才抛异常.
  

__dirname

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

      示例,从 /Users/mjr 运行 node example.js:
      
      console.log(__dirname);
      // 打印: /Users/mjr
      console.log(path.dirname(__filename));
      // 打印: /Users/mjr
  

__filename

      当前模块的文件名。 这是当前的模块文件的绝对路径(符号链接会被解析)。

      对于主程序,这不一定与命令行中使用的文件名相同。
      
      有关当前模块的目录名,参阅 __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。
  
posted @ 2019-10-24 16:55  燕子fly  阅读(202)  评论(0编辑  收藏  举报