- 引入文件的路徑必須正確衅斩,比如引入樣式的時(shí)候绑青,
less
就是less
,css
就是css
屋群,必須是正確的路徑闸婴。
還有一些application
開頭的文件路徑,都直接用相對(duì)路徑了芍躏。其實(shí)是可以配置resolve
參數(shù)的邪乍。 但是。 我懶~
之前的jspm是會(huì)動(dòng)態(tài)編譯
less
成css
对竣, 所以都直接引用css
就可以庇楞,但是也會(huì)造成問題, 比如中間如果編譯失敗否纬,自動(dòng)編譯就不 work了吕晌, 還有就是如果在less
里面有import
, 也容易引起watch失敗临燃。
- 不需要html文件了 (直接在
webpack/FILES.js
里面定義)
我們用到的html
文件其實(shí)都大同小異睛驳,主要就是標(biāo)題 和track
的參數(shù)不一樣。
當(dāng)然還有一些 在里面直接寫了樣式的膜廊,我直接拿出去了柏靶,有些直接在html
引入庫的, 我也拿出去了溃论。 最后只需要一個(gè)大的map
屎蜓, 告訴webpack
哪個(gè)路徑要設(shè)置什么樣的title
和rack
對(duì)應(yīng)的參數(shù)就行了。
對(duì)于某些特殊的庫钥勋,必須用script tag
的炬转。 比如
jsPlumb: '/node_modules/jsplumb/dist/js/jsPlumb-2.1.2-min.js',
pace: '/js/bak/pace.1.0.2.min.js',
introJs: '/node_modules/intro.js/intro.js',
'render-html-to-pdf': 'https://linwalker.github.io/render-html-to-pdf/js/html2canvas.js',
jsPDF: '/js/plugin/jsPdf.js'
還有很多庫雖然是npm install
的, 但是本質(zhì)上就是引入一個(gè)js算灸,污染環(huán)境才能用扼劈,比如summernote
, dropzone
菲驴,codemirror
荐吵, 能換掉的話,還是趁早換掉把赊瞬。
話說我們用了3個(gè)庫來做富文本編輯先煎,
umeditor
和summernote
還有medium-editor
,
事實(shí)上只有medium-editor
是真的支持npm
的。另外兩個(gè)本質(zhì)上都是載入js文件污染環(huán)境巧涧。
還有一些是必須剪掉某些css的薯蝎, 比如email
模塊的view.html
, 不需要加載任何css
谤绳。 就加了一點(diǎn)點(diǎn)小小的邏輯來對(duì)html模版做改動(dòng)就可以了占锯。
- 語法更加嚴(yán)格了袒哥,用到的變量必須
import
之前因?yàn)槊總€(gè)html
都會(huì)自動(dòng)加入jquery
之類第三方庫的script
標(biāo)簽,所以在寫代碼的時(shí)候消略, 就算沒有import $ from 'jquery'
堡称, 也可以直接使用$
。
我一開始沒有直接把所有直接在html的模版里面引入所有的庫 (之前會(huì)默認(rèn)引入jquery
,jquery-ui
,bootstrap
,antd
,react
,react-dom
)艺演;
然后就有很多問題粮呢,最大的問題就是我們用了相當(dāng)多的jquery
插件, 這些插件都需要先有jquery
钞艇, 而import
命令是不會(huì)污染全局環(huán)境的啄寡。在webpack
中必須要配置了extenel
,表示明確告訴webpack
哩照, 這個(gè)import
不用管挺物。
然而,我們真的需要那么多jquery
的插件來解決問題嗎飘弧?
import '../../js/pagev2/easing.js'; // 這個(gè)是動(dòng)畫效果嗎识藤。。次伶。
import '../../js/pagev2/jquery.htmlClean.js'; // 這個(gè)又是用來干什么的痴昧。。
icheck // 這個(gè)純css就能解決的問題竟然引了一個(gè)庫9谕酢8献!
nouislider // 這個(gè)可以用ant 替代了
jquery.nestable.js // 這個(gè)可以用ant 替代柱彻?
bootstrap
除了css
豪娜,我們就是用它來實(shí)現(xiàn)tab
/tooltip
/datepicker
/modal
, 全部都可以用ant
替代。 tab
甚至可以直接用css
替代哟楷。(是的瘤载,我就是這么干的,想看css
的同學(xué)可以參考components/toggleTab.less
卖擅, 使用方法在less
里)
總之我后來就直接在html
里面寫好
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.3.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.3.0/react-dom.min.js"></script>
改完之后還是很爽的鸣奔, webpack
的幾大優(yōu)勢:
- 編譯速度很快,比如我只關(guān)心
pagev2
的話惩阶,20多秒就能編譯完挎狸。 - 實(shí)時(shí)編譯代碼,不用手動(dòng)刷新
- 編譯整個(gè)項(xiàng)目只需要不到5分鐘 (這個(gè)有坑琳猫,后面說)
- 沒有了jspm伟叛, 所有的包管理只用npm就可以
因?yàn)槲腋耐曛笠纯词遣皇钦娴母暮昧耍愿耐曛蟮捻撁嫖叶键c(diǎn)開來看來看脐嫂,發(fā)現(xiàn)了如下嚴(yán)重的bug
can not edit selected field : 'application/form/newForm'
can not open : 'application/report/show_customers/index',
can not open : application/wechat/template/list.html
can not find service, line No: 79 /Users/huangling/code/appui/application/common/redux-onboarding.js
can not send: mktcmp/template/ preview wechat message, and send
然而就在我覺得好像一切都搞定了準(zhǔn)備看看全部文件一起編譯要多久的時(shí)候统刮,悲劇發(fā)生了, 因?yàn)橛?30多個(gè)入口账千,直接out of memory了侥蒙。
我發(fā)現(xiàn)最多一次build40個(gè),再多就肯定out of memory了匀奏, 網(wǎng)上各種搜方案鞭衩,發(fā)現(xiàn)就有一個(gè)paraller-webpack
比較靠譜,原理就是一次性多開幾個(gè)webpack
娃善,我把130個(gè)文件分了10批论衍,終于可以build了。大概就是5分鐘左右聚磺。(事實(shí)上如果不是同時(shí)跑坯台,10個(gè)入口 大概也就是2分鐘就能build完, 說明多線程還是很耗資源疤鼻蕖)
但是蜒蕾,如果要hot load 怎么辦。焕阿。不全部編譯咪啡,怎么一起監(jiān)聽呢。暮屡。 非常難過撤摸,至今沒有想到好的解決方案。褒纲。愁溜。
好消息是,webpack
也有一個(gè)watch模式外厂,雖然不能實(shí)時(shí)更新冕象,但是可以手動(dòng)刷新。汁蝶。
所以現(xiàn)在如果用 gulp start --watch
, 還是可以跟之前一樣渐扮, 改完了代碼,手動(dòng)刷新。不用重新編譯拐袜。
所以現(xiàn)在的命令是:
gulp start [--watch] // 清空文件帖努,拷貝文件, 編譯文件
其實(shí)文件不用每次都拷貝耻讽,因?yàn)閍ssets都是一樣的
gulp serve --test // 跟之前一樣
還有兩個(gè)很嚴(yán)重的問題
- uglify plugin 有問題
uglify plugin 0.6.4 不支持es6語法。 所以必須babel編譯過了的才能壓縮帕棉,
需要使用 uglify-plugin的1.0版 本针肥, 但npm上的版本是0.6.4饼记。 直接npm下載github上的版本又總是不能被識(shí)別,實(shí)在是不知道怎么回事慰枕。具则。。
為了用babel編譯所有的文件具帮, 在loader 里就不能加 exclude: /node_modules/博肋,然后react-dates 就怎么都編譯不過了。蜂厅。不知道其他的庫會(huì)不會(huì)也有類似的問題 - watch 模式刷新好慢胺朔病!
基本上要10秒才能刷新掘猿,不知道是不是因?yàn)槿肟谔鄬?dǎo)致的病游,沒有仔細(xì)研究