簡體   English   中英

ESM 導出 * 模塊除外

[英]ESM export * except from module

鑒於我有兩個帶有很多命名導出的導入(太多而無法將它們全部寫出來)並且我想重新導出這些除了其中的幾個。 就我而言,這是因為一些導出發生沖突。

作為我要存檔的示例,假設我們有兩個文件:

foo.js

export const a = 1;
export const b = 2;

bar.js

export const b = 1;
export const c = 3;

如果我想使用 CommonJS 聚合並重新導出它們,我可以這樣做:

/* use rest destructuring to put everything except "b" into variable "foo" */
const { b, ...foo } = require("./foo"); 
const bar = require("./bar");

module.exports = {
    ...foo,
    ...bar
};

當我使用 typescript 時,我最接近的是以類似的方式使用export = {... }

import * as foo from "./foo";
import * as bar from "./bar";

const { b, ...foo2 } = foo;

export = {
    ...foo2,
    ...bar,
};

然而,據我所知,這將創建一個帶有 CommonJS module.exports的文件,而不是一個合適的 ESM 模塊(並且可能需要esModuleInterop )。 它是一個 typescript 結構,在編寫 vanilla JS 時不可用。

有沒有辦法使用export import /導出來存檔它?

有沒有辦法使用 ESM 導入/導出來存檔它?

不,不是在純標准 ESM 中,不是沒有做你試圖避免的事情:列出命名的出口。 ESM import / export中沒有“rest”概念。

我想您知道這一點,但您可以導出一個 object 的屬性為abc ,但這與重新導出命名導出是完全不同的事情。 它不會是實時綁定,導入其部分的語法不同於導入命名導出(除非涉及構建時工具,如 TypeScript 或捆綁器等)。

只是 FWIW,這就是它的樣子(它與接近尾聲的 TypeScript 版本非常相似),但我認為這不是你想要的:

reexport.js

import * as foo from "./foo.js";
import * as bar from "./bar.js";

const { b, ...restOfFoo } = foo;
export default {
    ...restOfFoo,
    ...bar,
};

然后使用它是:

// Import the object (which is the default export)
import stuff from "./reexport.js";

// Destructure into local vars (optional, but...)
const { a, b, c } = stuff;

// Use it...
console.log(a, b, c);

這就是所有標准的 ESM。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM