[英]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 的屬性為a
、 b
和c
,但這與重新導出命名導出是完全不同的事情。 它不會是實時綁定,導入其部分的語法不同於導入命名導出(除非涉及構建時工具,如 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.