2017-05-31 49 views
2

如果我使用babel-plugin-transform-runtime插件,那麼我的代碼將import/requirebabel-runtime而不是將所有這些輔助函數內聯。這很好,但它使我的圖書館具有依賴關係babel-runtime。我寧願做的是讓巴貝爾提取一個額外的文件(./babel-runtime),並將其與其他輸出文件放在一起,這樣我就不必將其作爲外部依賴關係包含它。也就是說,我不需要在我的庫被使用的任何地方添加到package.json。這可能嗎?如何在沒有外部依賴的情況下使用babel-runtime轉換?

+0

不會將您的代碼與webpack或Rollup捆綁在一起解決此問題嗎? –

+0

@MichałPerłakowski嗯,我不想預先webpack它。這個想法是將我的庫作爲ES6模塊進行分發,以便消費者可以將它抖動。不確定彙總如何避免運行時依賴。 – mpen

回答

1

您可以通過使用moduleName選項在transform-runtime插件導入自定義模塊,而不是babel-runtime

{ 
    "plugins": [ 
    ["transform-runtime", { 
     "moduleName": "./babel-runtime" 
    }] 
    ] 
} 
+0

如果我的庫目錄結構不平坦,模塊路徑將會中斷。另外,你是否建議將'babel-runtime'從我的'node_modules'中複製到我的dist中,或者是什麼? – mpen

+0

@mpen是;你說你不想使用'babel-runtime'作爲外部依賴,所以你可以用它作爲本地模塊。但也許我誤解了你的問題。你能解釋你實際想要達到的目標嗎?包含'babel-runtime'作爲外部依賴項有什麼問題? –

+0

如果我編寫一個庫,它依賴於babel-runtime,那麼使用我的庫的任何人都必須安裝它。我想它變成了「同伴依賴」。我不想在我的小實用程序庫中有任何依賴關係。如果這是一個單一的項目,當然,幾個額外的代價並不是什麼大不了的,但對於一小組幫助函數來說,這並不好。想象一下,如果lodash需要babel運行時。 – mpen

0

我發現的唯一的解決辦法是使用babel-plugin-transform-runtime插件,並添加exclude: ['transform-regenerator']到你的配置。這將阻止Babel添加對再生器的依賴。這也意味着您的代碼不會在舊版瀏覽器中運行。

如果您需要舊版瀏覽器的支持,您可以嘗試fast-async。它說有一種方法可以只依賴索引文件內聯依賴項,但我還沒有嘗試過。我相信這是假定瀏覽器支持Promises,但不支持異步/等待。

相關問題