《現(xiàn)代JavaScript庫(kù)開(kāi)發(fā)》:一年回顧與展望
從2013年至今,我陸續(xù)創(chuàng)作了多個(gè)庫(kù),關(guān)于如何開(kāi)發(fā)JavaScript庫(kù),我也做了一些總結(jié)和分享,借這個(gè)機(jī)會(huì),下面做個(gè)簡(jiǎn)要回顧。
2015年,我發(fā)布了zepto.fullpage,一款輕量級(jí)的全屏滾動(dòng)插件。
2016年,我發(fā)布了前端模板template.js。
2018年是一個(gè)里程碑,我給公司搭建了Util.js,同時(shí)開(kāi)源了jslib-base v1,并撰寫(xiě)了《如何寫(xiě)一個(gè)現(xiàn)代的JavaScript庫(kù)》一文,開(kāi)始將自己的經(jīng)驗(yàn)分享給大家。
2019年,我一邊搭建jsmini,一邊開(kāi)始著手撰寫(xiě)《現(xiàn)代JavaScript庫(kù)開(kāi)發(fā):原理、技術(shù)與實(shí)戰(zhàn)》。
2021年,我給公司搭建了jssdk,作為Util.js的升級(jí)版。
2023年1月,《現(xiàn)代JavaScript庫(kù)開(kāi)發(fā):原理、技術(shù)與實(shí)戰(zhàn)》正式出版。
2023年10月,jslib-base 發(fā)布了v2版本,帶來(lái)重要升級(jí)。
時(shí)光飛逝,《現(xiàn)代JavaScript庫(kù)開(kāi)發(fā):原理、技術(shù)與實(shí)戰(zhàn)》已經(jīng)出版一年了,本文主要內(nèi)容包括,書(shū)籍影響回顧,讀者問(wèn)題答疑和我自己的一些總結(jié)和感悟。
書(shū)籍影響回顧
初稿完成后,我就發(fā)給很多朋友試讀,也收獲了很多前端專(zhuān)家的推薦語(yǔ),這些都記錄在書(shū)籍開(kāi)頭了,這里不再展開(kāi),再次感謝為本書(shū)出版帶來(lái)幫助的所有朋友。
自本書(shū)出版以來(lái),就受到廣大讀者們的歡迎,下面我從三個(gè)方面梳理記錄下:
1. 銷(xiāo)量:
自書(shū)籍面世以來(lái),它迅速登上了京東新書(shū)榜首,并在飆升榜上一馬當(dāng)先。

在當(dāng)當(dāng)網(wǎng),它也榮登銷(xiāo)量榜首位,顯示出它在讀者中的受歡迎程度。
這些成績(jī)不僅反映了市場(chǎng)對(duì)本書(shū)的認(rèn)可,也證明了JavaScript庫(kù)開(kāi)發(fā)領(lǐng)域的熱度和重要性,當(dāng)然也要非常感謝出版社運(yùn)營(yíng)老師,真的非常專(zhuān)業(yè)。
2. 獎(jiǎng)項(xiàng):
在個(gè)人榮譽(yù)方面,我有幸連續(xù)兩年(2022年和2023年)被評(píng)為“優(yōu)秀作者”,這是對(duì)我多年來(lái)在技術(shù)寫(xiě)作和開(kāi)源貢獻(xiàn)上不懈努力的認(rèn)可。
2023年,我還被授予“技術(shù)領(lǐng)路人”稱(chēng)號(hào),這不僅是對(duì)我的個(gè)人成就的肯定,也是對(duì)本書(shū)影響力的一個(gè)證明。
3. 評(píng)價(jià):
在讀者評(píng)價(jià)方面,本書(shū)在豆瓣、京東以及微信讀書(shū)等平臺(tái)上都收獲了極高的評(píng)價(jià)。讀者們贊賞書(shū)中對(duì)JavaScript庫(kù)開(kāi)發(fā)的深入剖析和實(shí)用指導(dǎo),認(rèn)為它不僅適合初學(xué)者入門(mén),也適合資深開(kāi)發(fā)者深入研究。這些正面的反饋是對(duì)我的工作最好的鼓勵(lì),也激勵(lì)我繼續(xù)在技術(shù)領(lǐng)域探索和創(chuàng)新。
豆瓣評(píng)分一直穩(wěn)定在8.5分上下,節(jié)選如下:
京東好評(píng)率95%,這是讀者真金白銀給出的評(píng)分,節(jié)選如下:
微信讀書(shū)好評(píng)如潮,節(jié)選如下:

本書(shū)目前也出版了繁體版,你覺(jué)得哪個(gè)設(shè)計(jì)更好看呢。
問(wèn)題答疑
一本書(shū)籍讓所有人都滿意,顯然是不太現(xiàn)實(shí)的,畢竟重口難調(diào),我認(rèn)真匯總并分析了網(wǎng)友的意見(jiàn)反饋,最主要的問(wèn)題是一些網(wǎng)友反饋指出書(shū)中所用工具的版本較為陳舊。這個(gè)問(wèn)題的產(chǎn)生主要是因?yàn)閷?xiě)作過(guò)程跨越了四年的時(shí)間,而技術(shù)領(lǐng)域的發(fā)展日新月異。
對(duì)此,我想說(shuō)明幾點(diǎn):
首先,書(shū)中所寫(xiě)的工具和技術(shù)都是我在實(shí)際開(kāi)發(fā)過(guò)程中所使用和驗(yàn)證過(guò)的。在我的眾多開(kāi)源庫(kù)中,都是用的這一版,它們雖然可能不是最新版本,但都是經(jīng)過(guò)實(shí)戰(zhàn)檢驗(yàn)的成熟方案。
其次,書(shū)中對(duì)于工具的版本選擇是有意為之。我在書(shū)中固定了版本號(hào),目的是為了避免因工具升級(jí)帶來(lái)的不一致問(wèn)題。這樣可以確保讀者在跟隨書(shū)中示例學(xué)習(xí)時(shí),能夠獲得和我當(dāng)初寫(xiě)作時(shí)相同的體驗(yàn)和結(jié)果。
最后,我也意識(shí)到技術(shù)的更新?lián)Q代是不可避免的。因此,我在近期對(duì)jslib進(jìn)行了升級(jí),推出了jslib v2,其中包含了對(duì)工具和庫(kù)的最新版本更新。這樣一來(lái),讀者可以在學(xué)習(xí)書(shū)中的基礎(chǔ)原理的同時(shí),也能接觸到更現(xiàn)代的工具和技術(shù)。
總之,我希望讀者能夠理解書(shū)中的內(nèi)容是基于當(dāng)時(shí)的技術(shù)環(huán)境所編寫(xiě)的。雖然具體的工具和版本可能會(huì)有所變化,但書(shū)中所講述的原理和思想是恒久不變的。同時(shí),我也會(huì)繼續(xù)關(guān)注技術(shù)發(fā)展,不斷更新和完善自己的工作,以便為讀者提供最新的學(xué)習(xí)資源。
我的收獲
在本書(shū)的寫(xiě)作過(guò)程中,我收獲了許多寶貴的經(jīng)驗(yàn)和深刻的感悟。
首先,在寫(xiě)作初期,我采用了自己開(kāi)發(fā)的gitbook-boilerplate,這讓我能夠使用熟悉的Markdown進(jìn)行寫(xiě)作,并利用Git來(lái)管理版本。整個(gè)過(guò)程中,我提交了273個(gè)commit,這個(gè)數(shù)字見(jiàn)證了我對(duì)每一個(gè)細(xì)節(jié)的不懈追求。交稿后,書(shū)籍經(jīng)歷了三審三校的嚴(yán)格把關(guān),主要借助WPS的審閱功能,期間我做了超過(guò)2萬(wàn)次的細(xì)節(jié)修改,這個(gè)過(guò)程雖然漫長(zhǎng)且辛苦,但也是提升書(shū)籍質(zhì)量的關(guān)鍵步驟。
在寫(xiě)書(shū)的過(guò)程中,有些人喜歡在一個(gè)主題下不斷地添加內(nèi)容,進(jìn)行“加法”。而我則傾向于“減法”,即在JavaScript庫(kù)開(kāi)發(fā)這個(gè)主題上,我努力將內(nèi)容精簡(jiǎn)到不能再減少。這種做法讓書(shū)籍更加聚焦和精煉,是我在寫(xiě)作過(guò)程中學(xué)到的一個(gè)重要道理。
關(guān)于寫(xiě)書(shū),最關(guān)鍵的是要確定一個(gè)清晰的大綱,這通常是通過(guò)對(duì)主題進(jìn)行深入思考和反復(fù)推敲來(lái)實(shí)現(xiàn)的。一旦大綱確立,接下來(lái)的工作就是按照小節(jié)、篇章去填充內(nèi)容。每一小節(jié)的寫(xiě)作量大致相當(dāng)于撰寫(xiě)一篇博文,因此,堅(jiān)持下去是成功的關(guān)鍵。如果你也有寫(xiě)書(shū)的夢(mèng)想,歡迎聯(lián)系我交流經(jīng)驗(yàn)。
最后,我還學(xué)到了一個(gè)重要的道理:在寫(xiě)書(shū)的同時(shí),也要兼顧好工作和家庭。寫(xiě)書(shū)最大的挑戰(zhàn)之一是時(shí)間管理。我通常給自己設(shè)定一些小目標(biāo),比如每次只寫(xiě)300字或者一段話。你會(huì)發(fā)現(xiàn),一旦開(kāi)始坐下來(lái)寫(xiě),成果往往會(huì)超出預(yù)期。
總之,寫(xiě)書(shū)是一段充滿挑戰(zhàn)但也極具成就感的旅程。通過(guò)這次經(jīng)歷,我不僅提升了自己的技術(shù)和寫(xiě)作能力,也收獲了對(duì)生活和工作的新認(rèn)識(shí)。
未來(lái)展望
在未來(lái)的JavaScript庫(kù)開(kāi)發(fā)領(lǐng)域,我預(yù)見(jiàn)到幾個(gè)重要的趨勢(shì)和期望:
-
? 構(gòu)建工具Rust化:隨著Web應(yīng)用的復(fù)雜度不斷增加,對(duì)性能的要求也越來(lái)越高,前端構(gòu)建打包lint工具,都在經(jīng)歷Rust重寫(xiě),知識(shí)目前階段還不成熟。
-
? TypeScript的普及:隨著TypeScript的普及,越來(lái)越多的JavaScript庫(kù)將支持或直接使用TypeScript進(jìn)行開(kāi)發(fā),以提高代碼的可靠性和開(kāi)發(fā)效率。
-
? 新技術(shù)的融合:我們將看到更多的JavaScript庫(kù)整合新興技術(shù),如WebAssembly等,以拓展其應(yīng)用范圍和性能極限。
針對(duì)這些趨勢(shì),我最近發(fā)布了jslib-base 2.0,旨在支持舊倉(cāng)庫(kù)的一鍵升級(jí),并引入了一系列改進(jìn),包括:
-
? 升級(jí)全部工具到最新版
-
? TypeScript庫(kù)接入Babel工具
-
? 添加Prettier、Commitlint和Husky
-
? 添加一個(gè)本地server
-
? 支持Node exports condition
-
? 遷移Travis到GitHub Action
按照本書(shū)內(nèi)容新建的庫(kù),可以支持一鍵升級(jí),也算解決了網(wǎng)友反饋的書(shū)中工具版本陳舊問(wèn)題。
我相信,通過(guò)這些更新和改進(jìn),jslib-base 2.0將為JavaScript庫(kù)開(kāi)發(fā)提供更強(qiáng)大、更靈活的基礎(chǔ)設(shè)施,幫助開(kāi)發(fā)者更高效地構(gòu)建和維護(hù)他們的項(xiàng)目。
結(jié)語(yǔ)
在過(guò)去的五年里,我傾注了無(wú)數(shù)的心血和熱情于《現(xiàn)代JavaScript庫(kù)開(kāi)發(fā):原理、技術(shù)與實(shí)戰(zhàn)》這本書(shū)的打磨和關(guān)注中。四年的寫(xiě)作,加上一年的出版后維護(hù),每一步都凝聚了我的努力和對(duì)技術(shù)的熱愛(ài)。這本書(shū)的每一個(gè)字、每一個(gè)例子,都是我對(duì)JavaScript庫(kù)開(kāi)發(fā)領(lǐng)域的深刻理解和實(shí)踐經(jīng)驗(yàn)的體現(xiàn)。
我非常感激每一位讀者的支持和鼓勵(lì),是你們的肯定讓這本書(shū)能夠發(fā)光發(fā)熱,也是你們的反饋和建議讓我不斷進(jìn)步。這篇文章,我獻(xiàn)給所有支持我的人,也獻(xiàn)給我自己,作為這五年旅程的一個(gè)總結(jié)和紀(jì)念。
現(xiàn)在,是時(shí)候展望未來(lái)了。JavaScript庫(kù)開(kāi)發(fā)領(lǐng)域仍然充滿了挑戰(zhàn)和機(jī)遇,我期待著能夠繼續(xù)在這個(gè)領(lǐng)域探索和前進(jìn)。如果有機(jī)會(huì),我愿意撰寫(xiě)這本書(shū)的第二版,以分享更多的經(jīng)驗(yàn)、技術(shù)和思考。
再次感謝大家的支持,讓我們一起期待未來(lái)的可能性!
