【问题标题】:How does one "implicitly export an entire module"?如何“隐式导出整个模块”?
【发布时间】:2019-05-23 14:07:32
【问题描述】:

以下是来自 MDN 对 JavaScript import 语句的引用中的 a section(添加了强调):

从模块导入单个导出

给定一个名为 myExport 的对象或值,该对象或值已从模块 my-module 导出隐式(因为整个模块已导出) 或显式(使用export 语句),这会将myExport 插入到当前作用域中。

import {myExport} from '/modules/my-module.js';

我知道从模块中显式导出对象或值意味着什么(使用export 语句),但是如何隐式地导出它们 (暗示没有使用export 语句)?导出“整个模块”是什么意思?

【问题讨论】:

  • exports.variableName = 1 我认为是语法。 webreflection.co.uk/blog/2015/11/30/… 但我不是 100%,我很想知道更多关于这个主题的信息。
  • @FrancisLeigh:那是 CommonJS 模块,不是 ES6。
  • 没有export 语句就没有ES6 导出,但在重新导出的情况下可能不需要显式命名导出。

标签: javascript ecmascript-6 es6-modules


【解决方案1】:

假设我理解正确,我认为该声明的措辞有些混乱。我认为他们所说的“明确地”是什么意思会明确地命名,例如

export { foo };
// or others
export var foo;
export function foo(){}
export class foo {}
export { foo } from "./foo.js";

隐式 是没有明确命名的,例如

export * from "./foo.js";

然后在哪里做

import { foo } from "./mod.js";

只要modfoo.js 文件重新导出foo 就可以工作。

【讨论】:

  • 是的,这是唯一合理的解释。
  • 你可能是对的——但我认为这个想法既不是mod 的“全部”(它只重新导出foo 的出口)也不是@ 的“全部” 987654329@(仅导出它明确导出的任何内容)实际上已导出;如果正确的话,“因为整个模块被导出”的陈述应该真的是“因为某些模块是使用export * from 语句完全重新导出的”或类似的。
  • 是的,完全同意。
  • 我注意到 MDN 已经在某个时候进行了更新,以确认这确实是意图,尽管他们仍然使用相同的令人困惑的语言。
【解决方案2】:

让我们这样做

  1. 给定一个名为 myExport 的对象或值,该对象或值已从模块中隐式导出(因为已导出整个模块)

  1. 给定一个名为 myExport 的对象或值,该对象或值已从模块显式导出(使用 export 语句)

所以我可以像这样导出对象或函数

// ./modules/my-module.js
export default UserApi = {
  myExport: function() {
   console.log(please make api call)
  }
}


// ./otherfile.js
import {myExport} from '/modules/my-module.js';

我从不明确导出myExport,但您可以在不导入我明确导出的UserApi 的情况下导入myExport

【讨论】:

  • SyntaxError: 请求的模块“/modules/my-module.js”不提供名为“myExport”的导出
猜你喜欢
  • 1970-01-01
  • 2019-01-31
  • 2022-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 1970-01-01
相关资源
最近更新 更多