簡體   English   中英

如何有選擇地導入ES2015模塊功能,但是使用命名空間?

[英]How to import ES2015 modules functions selectively, but with namespacing?

我開始使用Rollup和D3版本4,它是用ES2015模塊編寫的。 我使用傳統的D3命名空間“d3”編寫了一些代碼。 現在我想使用Rollup創建一個自定義包。 我想使用樹搖晃,因為我可能只使用了d3中大約一半的功能,我希望盡可能保持光線。

我很清楚我可以有選擇地導入函數,例如:

import {scaleLinear} from "d3-scale";
import {
      event,
      select,
      selectAll
} from "d3-selection";

這將變得非常冗長,因為d3的一半是很多功能。 我可以忍受這一點。 更大的問題是它還需要在沒有命名空間的情況下完全重寫我的所有函數標識符。 我不太關心它,因為我更喜歡命名庫代碼。

我明白我可以導入所有模塊:

import * as d3 from "d3";

它保留了d3對象命名空間,這對我的代碼組織很有用。 但是,Rollup無法將未使用的功能從樹中搖出來。

我夢寐以求的是:

import {
      event,
      select,
      selectAll
} as d3 from "d3-selection";

但是這種特征/語法似乎不存在於規范中。 如何有選擇地定位模塊的各個部分,並在導入期間保留命名空間?

您需要一個重新導出模塊:

export {
      event,
      select,
      selectAll
} from "d3-selection";

import * as d3 from './d3';

規范中似乎沒有這種特征/語法

不,這確實是不可能的。 根據規范,一旦包含一個模塊,就會對整個模塊進行評估和包含,因此不需要部分包含。 命名空間對象始終允許訪問模塊的所有屬性。

但是,Rollup無法將未使用的功能從樹中搖出來。

這將是Rollup的錯,但實際上它能夠靜態分析命名空間對象的用法代碼,並找出使用的屬性。 如果對象用於不是虛線成員訪問的任何東西,則此優化可能需要挽救,但通常它很可能。 如果它沒有按預期工作,您可能需要提交錯誤報告(另請參閱故障排除 )。

暫無
暫無

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

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