nodejs 对 npm 支持非常良好,同时对commonJs的引入方式也很欢迎

    导入一个模块时的查找规则如下:

    • 当使用 nodejs 导入模块时,如果模块路径不是以 ./ 或 ../ 开头,则 node 会认为导入的模块来自于 nodemodules 目录,例如:
      **var
      = require(“lodash”);
      (补充)但是,当不是./ 或 ../ 开头、
      名字又很特殊的包,会当做node的内置模块**(比如fs等)引入。
      它首先会从当前目录(上一行代码所在的js文件所在的位置)的以下位置寻找文件
      前提-直接找node_modules文件夹中:
    • node_modules/lodash.js 若查找不到文件,会从下边同名文件夹的位置查找
    • node_modules/lodash/入口文件。若当前目录没有这样的文件

    所谓: *入口文件,**按照以下规则确定:

    1. 查看导入包的package.json文件,读取main字段作为入口文件(这里没有package.json呢?会直接走b那一步么)
    2. 若不包含main字段,则使用index.js作为入口文件
    3. 若index.js也没有,即使有同名文件夹,也算在这里没找到该模块,将走下边查找模块的第三步

      • 则会回溯到上级目录(?)按照同样的方式查找
      • 如果到顶级(盘符)目录都无法找到文件,则抛出错误


      入口文件的规则同样适用于自己工程中的模块
      在 node 中,还可以手动指定路径来导入相应的文件,这种情况比较少见

      附加:

    • 导入自己的文件模块,如果入口文件是index.js,可以不用写完整路径。比如写法是 require(‘./a’)

    node识别路径是./ 或者../开头的,查找路径如下:
    会先查看当前文件是不是有同名文件,没有的话把当做文件夹,并把该文件夹当做一个包,查找包里边的package.json文件,如果有读取json文件的main字段。如果没有package或package里没定义main字段,则直接读包根目录下的入口文件index.js。(如果都没有,就是找不到这个模块?)
    image.png

    • 盘符目录:如D: 盘、C: 盘等
    • 因为直接从node_modules中找,所以把node_modules放到项目根目录下,就是为了让所有的文件都可以引入模块用。
    • package.json里边的入口文件设置

      image.png