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