导出一个已导入的模块

59

我有两个 JavaScript 模块,看起来像这样:

// inner/mod.js
export function myFunc() {
   // ...
}

// mod.js
import * as inner from "./inner/mod";

我想从mod.js导出myFunc。我该如何做?

编辑:我应该澄清一下,这个函数已经从inner/mod.js导出了,但我也想从外部的mod.js导出这个函数。

对于那些需要澄清的人,我想实现这个目标:

// SomeOtherFile.js
import * as mod from "mod"; // NOT inner/mod

mod.myFunc();

你是否遇到了错误? - Enijar
不,我没有收到任何错误。但是我也没有从“mod”中导出任何内容。请注意,没有导出语句。 - Max
你能详细说明一下你希望在其他地方如何使用吗?从你的问题中我不清楚你想要实现什么。 - azium
我已经更新了问题,提供了一个例子。 - Max
2个回答

112

我相信你正在寻找的是

export * from './inner/mod';

这将重新导出./inner/mod的所有导出。实际上,规范中有非常好的表格列出了所有可能的 importexport 变体。


4
似乎唯一可行的方式是使用import mod from "./inner/mod"; export {mod}。使用export * from './inner/mod';似乎不起作用。 - Max
1
实际上,它确实有效。但是,如果 inner/mod 导出一个默认函数,则无法正常工作。 - Max
15
是的,这只涵盖了命名导出。您可以使用 export {default} from './inner/mod'; 显式地导出默认导出。 - Felix Kling
使用TypeScript和Firebase云函数:文件A(子文件) export const api = functions.https.onRequest(app);文件B(索引) export * from './api'; - Denis Truffaut

33
// inner/mod.js
export function myFunc() {
   // ...
}

// mod.js
import { myFunc } from "./inner/mod";
export { myFunc };

尽可能明确导入的内容,少则为佳。因此,我已更改了mod.js中的导入。如果您确实使用import *,将定义一个变量,该变量将是您从所导入模块中导出的所有名称的对象。

重新导出与制作自己的东西并进行导出相同。


能否导出整个对象?我想要一个“索引”模块,可以导出所有子模块。 - Max
是的,你可以导出任何静态的东西,比如对象、数组、字符串、数字等等。发生的事情是所有导出的东西都会进入一个键值对对象中。键是导出的名称,值当然就是你要导出的东西了。你不能导出表达式。 - Norbert
我正在使用Babel将ES6转换为ES5。使用您的示例,我在“export myFunc”上得到了一个意外的标记。 - Max
更新了代码,这个能用吗?我自己只使用了几天这种语法,http://www.2ality.com/2014/09/es6-modules-final.html 是一个很棒的资源。 - Norbert
7
export {myFunc as myFunc}; 可以写成 export {myFunc};。这个修改保持了原意,同时使语句更加通俗易懂。 - Felix Kling

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接