Node.js (ES6 / Babel) 中 import X 和 import * as X 的区别?

2023-11-25

我有一个 Node.js 库lib用 ES6 编写(编译为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.

有人能解释一下这里发生了什么吗?这两种导入方法不应该是等效的吗?如果不是,我错过了什么区别?


import * as lib from 'lib';

正在请求一个包含“lib”所有命名导出的对象。


export var config = _config;
export var db = _db;
export var storage = _storage;

被命名为导出,这就是为什么你最终会得到像你一样的对象。


import lib from 'lib';

正在要求default出口lib.


e.g.

export default 4;

将使lib === 4。它不获取指定的导出。要从默认导出中获取对象,您必须显式执行

export default {
  config: _config,
  db: _db,
  storage: _storage
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js (ES6 / Babel) 中 import X 和 import * as X 的区别? 的相关文章

随机推荐