最近公司項目硬性要求使用vue全家桶+element-ui的方式來開發(fā)后臺,但是原來的項目是requirejs寫的,所以所有l(wèi)aravel模塊都是可以獨立安裝和卸載的,也就是說他們的js和css都是獨立的,那些公用的直接放在themes/backend
主題目錄下,那么問題來了,單頁程序如何實現(xiàn)這種方案,需求
(注意:這里的module是laravel的module,不是js和npm的module)
每個模塊獨立安裝,安裝后自動publish模塊中的Resources/Bakcend/assets
目錄到public/backend/modules/模塊名
下面,并且在themes/bakcend/index.blade.php
中可以自動加載(已解決)
單頁的后臺使用webpack打包,打包目錄public/backend/modules/模塊名
下面,并在打包后自動復(fù)制一份到modules/模塊名/Resources/Bakcend/asset
s下面(已解決)
每個模塊可以有自己的后臺菜單,管理界面等,并且這些全部用vue,vue-router,element-ui實現(xiàn),所有模塊的入口頁面位于themes/backend_default/index.blade.php
,(已解決)
4.每個模塊可以由不同的第三方自行開發(fā),發(fā)布到總的模塊中心,使用者可以自行下載所需模塊(PHP后端方面已解決,前端JS方面就出現(xiàn)問題了)
問題就出現(xiàn)在以上需求的第四條的前端方面,如果個人或者一個內(nèi)部團隊開發(fā)所有模塊就沒有這個問題,但不同的第三方開發(fā)就引起了webpack打包的問題
目前有兩種方案,但是都不能從根本上解決問題
第一種是每個laravel-module單獨打包,但是公共類庫無法處理,因為單頁的后臺不可能每個module的都生成一個vendor.js放置公共或者把公共類庫放入app.js,這樣在總的themes/backend_default/index.blade.php
里面加載每個module(blog-module,core-module,dashboard-module等)的vendor.js和app.js就會重復(fù)加載這些公共類庫
第二種是一個themes/backend主題下集成打包
每個module的資源都放在themes/backend/modules/{module-name}
里面,打包后自動抽取到各自的module/Resources/Backend/assets
中,然后別人安裝module的時候自動publish
這個module里面的assets
到public/backend/modules/{module-name
}目錄里,但是這樣也不行,因為如果每個開發(fā)者負(fù)責(zé)的module不同,所以在webpack.config.js
or webpack.mix.js里打包的東西也是不同的,比如我寫blog module
的app.js,你寫 dashboard module
的app.js,那么各自打包后的assets生成的vendor.js
(公共類庫存放的文件)的webpack module id不同(即使所有的module的app.js的公共類庫都一樣),publish后加載不同的module的app.js就會出錯,因為每個module的vendor.js不一樣,不能選擇任何一個加載
請問具體如何解決這個問題呢?