我有一个 node .js library 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: ... }.但是,如果我try 像这样包含库:

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.例如

export default 4;

会有lib === 4个.它不获取指定的导出.要从默认导出中获取对象,必须显式执行以下操作:

export default {
  config: _config,
  db: _db,
  storage: _storage
};

Node.js相关问答推荐

序列化事务未按预期工作

Express无法发布

条件内的表达式

Inno Setup如何在现有文本文件中追加新内容

在函数上执行 toString 的Typescript 会产生奇怪的字符 (path_1, (0, Promise.writeFile))

仅在一次查询中 MongoDB 上最近的一对位置

在 puppeteer 中从 pdf 中删除 about:blank 和 date-time

当API返回400状态代码时,使用Reactjs fetch获取错误消息

Amplify 部署的应用程序出现TypeError: handler is not a function错误,但它在本地运行

等待不在 Express.js 中处理 res.app.render

错误:无法检测到网络(event="noNetwork",code=NETWORK_ERROR,version=providers/5.6.8)

带权限的机密 Rest-Api - 总是 403 - 我做错了什么?

`npm install` 以Killed结尾

Nodejs-console.error vs util.debug

如何使用 Puppeteer 从输入中删除现有文本?

在 PassportJS 中使用多种本地策略

gyp WARN EACCES 用户root没有访问开发目录的权限

tsconfig.json 中模块类型的区别

NodeJS 中的 HTTPS 请求

Mongoose - 验证邮箱语法