難道我理解正確的話:你已經基本上得到了
- 定製庫反應的組分(通過的WebPack建建#1)
- 一個作出反應的應用程序,需要使用一些(全部)的這些組件(由Webpack build#2構建,完全獨立於#1)
?
如果是,則繼續閱讀。
該「這是可能的反應嗎?」問題應該改爲「這在Webpack中可能嗎?」,答案是「是」。以下是使用Webpack 2進行測試的,但也應該適用於v.1。
讓我們打電話給您的項目Lib
(您的React組件庫)和App
(庫消費者)。
在Lib
項目:
創建的切入點文件,說index.js
,即出口所有自定義反應的組分是這樣的:
import {Button} from './button';
import {DatePicker} from './DatePicker';
import {TextBox} from './textBox';
export const MyComponentLib = {
Button,
DatePicker,
TextBox
};
更新webpack.config.js
使該項目的捆綁UMD庫(也可以是'var'),並將入口點設置爲上述index.js
文件。這樣做會讓你的圖書館提供通過命名MyComponentLib
一個全局變量(名字來源於上面的export
)在消費應用以後:
...
output: {
path: './dist',
filename: 'mylib.bundle.js',
libraryTarget: 'umd'
},
...
entry: './index.js',
...
上至App
項目:
在index.html
文件中,您將有兩個<script>
標籤:一個用於mylib.bundle.js
(Lib
項目的輸出),另一個用於App
項目本身的捆綁包。你可能有更多的捆綁包(應用程序,供應商等),我只是簡化了這裏的東西。
更新webpack.config.js
將組件庫標記爲外部依賴關係。在這裏,MyComponentLib
是,再次,全局變量的圖書館可在和myComponents
是import
語句中使用名稱的名稱:
...
externals: {
myComponents: 'MyComponentLib'
},
...
現在,在App
可以導入成分像這個:
import {DatePicker} from 'myComponents';
這將在運行時通過全局變量動態加載組件庫中的DatePicker。
紅利:如果您使用eslint
,您不希望它抱怨您認識的外部模塊;添加到您的.eslintrc
:
...
"settings": {
"import/core-modules": ["myComponents"]
},
...
只是提供文檔:https://webpack.js.org/guides/author-libraries/ –