简易笔记:import 是如何从 node_modules 查找内容的?

719 阅读1分钟

import 查找内容的过程

  1. 首先会从本地的 node_modules 文件夹中找到对应工具库所在的文件夹,看是否存在 package.json 文件。

  2. 如果找到了 package.json

  • 就会先找 module 字段,然后读取对应路径下的文件,查找到此结束。
  • 如果没找到 module 字段,就会找 main 字段,然后读取对应的路径下的文件,查找到此结束。
  • 如果没有 main 字段,就会在文件夹下找 index.js 文件,然后读取文件,查找到此结束。
  • 如果以上都没找到就会返回异常,扔出 not find 异常。
  1. 如果不存在 package.json 就会直接找 index.js 文件,然后读取文件。

  2. 查找到此结束!如果还没有就会抛出异常。

关于 module 字段

说到 module 字段就不得不说一个和 webpack 很像的模块打包工具——rollup

rollup 是一个轻量级的打包工具,一般被用来打包模块或者库,可以根据需要将模块打包为 escommonjsAMDCMDUMDIIFE 等规范的模块。

rollup 提出了 module 这个字段,其原因是一般主流的模块或者库都是 commonjs 规范的模块,而 es2015 的模块规范才是 js 的未来,才应该是主流;

所以,一般的 package.json 中的 module 对应的模块为 es 模块,而 main 对应的为 commonjs 模块,webpackrollup 都会默认优先读取 module 字段。

参考文献

webpack -- require和import机制