我是JavaScript的新手,最近一直在努力进口 . 有一件事我无法绕过头脑 .
在较旧的节点模块(主要是那些在ES6之前看到灯光的模块)中,可以使用npm安装,例如 express
,通常不会定义默认导出 .
我的IDE(WebStorm)标记以下行,并且未在导入的模块通知中声明默认导出 .
import express from 'express';
尝试将整个模块作为别名导入时,可以避免此消息
import * as express from 'express';
隐式告诉我的IDE只导入所有内容并将其命名为 express
,但是这样做会导致在尝试在以下行上实例化应用程序时,express不是函数错误 .
const app = express();
特别是原始导入(没有别名)有效 .
在没有定义默认导出的情况下,使用不带别名的import语句导入的确切内容是什么?我认为这是整个模块,但似乎并非如此 .
1 回答
没有 . 实际上,instantiating the module将在导入的某些内容中抛出
SyntaxError
,该内容未从导入的模块多次导出或导出 .因为
import *
只导入一个具有导出属性的module namespace object . 如果你不是一个空对象 .这意味着您无法将它们作为ES6模块导入 . 您的IDE似乎期望尽管如此并提出警告 .
那么如果你在
import
声明中引用它们会发生什么?您的模块加载器可能会对它执行任何操作,并且HostResolveImportedModule将返回module record,而不是source text "ES6 module" record - 即它可能执行与CommonJS模块相关的任何实现 .