首页 文章

当没有定义默认导出时导入'module'导入模块的内容是什么?为什么导入*作为模块不同?

提问于
浏览
10

我是JavaScript的新手,最近一直在努力进口 . 有一件事我无法绕过头脑 .

在较旧的节点模块(主要是那些在ES6之前看到灯光的模块)中,可以使用npm安装,例如 express ,通常不会定义默认导出 .

我的IDE(WebStorm)标记以下行,并且未在导入的模块通知中声明默认导出 .

import express from 'express';

尝试将整个模块作为别名导入时,可以避免此消息

import * as express from 'express';

隐式告诉我的IDE只导入所有内容并将其命名为 express ,但是这样做会导致在尝试在以下行上实例化应用程序时,express不是函数错误 .

const app = express();

特别是原始导入(没有别名)有效 .

在没有定义默认导出的情况下,使用不带别名的import语句导入的确切内容是什么?我认为这是整个模块,但似乎并非如此 .

1 回答

  • 6

    当没有定义默认导出时,从'module'导入模块导入什么?

    没有 . 实际上,instantiating the module将在导入的某些内容中抛出 SyntaxError ,该内容未从导入的模块多次导出或导出 .

    为什么它与import *作为模块不同?

    因为 import * 只导入一个具有导出属性的module namespace object . 如果你不是一个空对象 .

    在较旧的ES6之前的节点模块中,通常不会定义默认导出 .

    这意味着您无法将它们作为ES6模块导入 . 您的IDE似乎期望尽管如此并提出警告 .

    那么如果你在 import 声明中引用它们会发生什么?您的模块加载器可能会对它执行任何操作,并且HostResolveImportedModule将返回module record,而不是source text "ES6 module" record - 即它可能执行与CommonJS模块相关的任何实现 .

相关问题