我有一个用ES6编写的node.js库lib
(用Babel编译),我在其中导出了以下子模块:
"use strict";
import * as _config from './config';
import * as _db from './db';
import * as _storage from './storage';
export var config = _config;
export var db = _db;
export var storage = _storage;
如果在我的主项目中包含这样的库
import * as lib from 'lib';
console.log(lib);
我可以看到正确的输出,并且它按预期的{ config: ... }
工作。但是,如果我尝试包含如下库:
import lib from 'lib';
console.log(lib);
它将是undefined
。
有人能解释一下这里发生了什么吗?这两个导入方法不应该是等价的吗?如果不是,我错过了什么区别?
3条答案
按热度按时间mjqavswn1#
正在要求具有所有'lib'具名汇出的对象。
是命名的导出,这就是为什么最终会得到一个对象。
正在请求
lib
的default
导出。例如:
它不会提取命名的导出。要从默认导出中获取对象,您必须显式执行
u0sqgete2#
只是添加到Logan's解决方案,因为理解导入与括号,* 和没有为我解决了一个问题。
相当于:
其中,* 类似于通配符,用于从lib导入所有
export var
。或者,使用:
允许您仅访问默认导出:
使用{}也只能从模块which reduces the footprint with bundlers like Webpack.导入特定组件
同时:
将导入包括
export default storage;
在内的所有模块请看丹·阿布拉莫夫的回答:When should I use curly braces for ES6 import?
nc1teljy3#
import X from Y;
是一种语法糖。import lib from 'lib';
等于
import { default as lib } from 'lib';