阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      Node.js module require.resolve

      Node.js module require.resolve(request[, options]) 可以用于从模块名取到绝对路径

      版本历史

      版本变更
      v8.9.0现在支持paths选项
      v0.3.0新增于: v0.3.0
      • request < string> 需要解析的模块路径。

      • options < Object>

        • paths < string[]> 解析模块的起点路径。

        此参数存在时,将使用这些路径而非默认解析路径。 注意此数组中的每一个路径都被用作模块解析算法的起点, 意味着 node_modules 层级将从这里开始查询。

      • Returns: < string>

      使用内部的 require() 机制查询模块的位置!

      此操作只返回解析后的文件名,不会加载该模块。

      简单的说, 在 Node.js 中使用 fs 读取文件的时候, 经常碰到要拼一个文件的绝对路径的问题 (fs 处理相对路径均以进程执行目录为准). 之前一直的方法都是, 使用 path 模块以及 __dirname 变量 :

      fs.readFileSync(path.join(__dirname, './assets/some-file.txt'));
      

      使用 require.resolve 可以简化这一过程:

      fs.readFileSync(require.resolve('./assets/some-file.txt'));
      

      此外, require.resolve 还会在拼接好路径之后检查该路径是否存在, 如果 resolve 的目标路径不存在, 就会抛出 Cannot find module './some-file.txt' 的异常. 省略了一道检查文件是否存在的工序 (fs.exists),这还是非常好用的.

      这个报错并不会加重你的检查负担, 毕竟使用 fs 去操作文件时, 如果发现文件不存在也会抛出异常. 反之, 通过 require.resovle 可以在提前在文件中作为常量定义, 那么在应用启动时就可以抛异常, 而不是等到具体操作文件的时候才抛异常.

      更多模块作用域的API介绍,请点击Node.js module 模块作用域查看


      更多内容请参考:Node.js module 模块,或者通过 点击对应菜单 进行查看;


      目录
      本文目录
      目录