import from 引入模块的顺序怎样的

在node中使用import from 可以像

import fs from 'fs'

引入核心模块
也可以引入用npm安装的模块

import axios from 'axios'

也可以单纯引入自定义的模块

import module from './module.js'

我想问一下import from 引入模块的具体机制是怎样的,或者是按何种查询顺序引入模块的

这是我查到的require的查询机制,不知道import from是否也一样

如果传递给 require() 的模块标识符不是一个核心模块,也没有以 '/' 、 '../' 或 './' 开头,则 Node.js 会从当前模块的父目录开始,尝试从它的 /node_modules 目录里加载模块。 Node.js 不会附加 node_modules 到一个已经以 node_modules 结尾的路径上。

如果还是没有找到,则移动到再上一层父目录,直到文件系统的根目录。

例子,如果在 '/home/ry/projects/foo.js' 文件里调用了 require('bar.js'),则 Node.js 会按以下顺序查找:

/home/ry/projects/node_modules/bar.js
/home/ry/node_modules/bar.js
/home/node_modules/bar.js
/node_modules/bar.js
这使得程序本地化它们的依赖,避免它们产生冲突。

阅读 16.7k
3 个回答

1.node中模块执行的顺序是先加载node自带的核心模块,再加载用户模块(就是我们写的),最后是加载第三方模块;
2.用户模块的查找规则:require("./index"),不写后缀名,查找规则为:index---index.js---index.json---index.node,require是node自带的文件导入方法,而import是ES6的导入方法;
3.第三方查找规则分为四种情况:

1.node_modules===>和文件一致的文件夹===>查找package.json===>查看是否有main属性,指向路径是否存在
2.无main:如果package.json中无main属性,或main的路径不存在,或物package.json文件,node加载index相关的文件(index.js,index.json,index.node)

3.无node_modules:如果node_modules找不到对应的模块文件夹,或无该文件夹,则向上一层文件夹查找index

4.如果上一级没找到继续上一级,查找到盘符未找到报错;cannot find modules XXX,如果没有npm init -y则会出现node_modules路径在c/用户/用户名

4.希望可以帮到你

import/export 目前尚未被node支持,因此实际使用都是转换成require

clipboard.png

至于require的规则,可以看官方文档,大致规则是:优先判断是否为内置模块,然后作为本地目录,分别寻找index/json/node文件等。

那要看你的插件如何工作的,不过一般是按照node的模块解析机制

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题