由于現(xiàn)在的博客是使用wordpress搭建,自己得經(jīng)常修改過(guò)一些代碼,但是修改第三方源碼真的比較痛苦,于是決定計(jì)劃開(kāi)始使用React + Node.js / Python開(kāi)發(fā)新博客項(xiàng)目,最終替換當(dāng)前博客代碼,方便以后博客的維護(hù)和更新,也能實(shí)現(xiàn)自我開(kāi)發(fā)技術(shù),架構(gòu)設(shè)計(jì),解決問(wèn)題能力的提升,同時(shí)記錄下整個(gè)開(kāi)發(fā)歷程,總結(jié),分享,希望能與讀者們一起進(jìn)步。本篇介紹如何使用Webpack和Babel,Eslint,documentation.js等搭建項(xiàng)目開(kāi)發(fā)環(huán)境和生產(chǎn)環(huán)境,也算項(xiàng)目的準(zhǔn)備工作,下一期計(jì)劃介紹項(xiàng)目的架構(gòu)設(shè)計(jì)和技術(shù)棧選擇。
npm VS Yarn
在本項(xiàng)目我們使用Yarn管理項(xiàng)目三方依賴(lài),不過(guò)放心,Yarn和NPM不沖突,也不是要替代NPM,使用方式基本一致,只需要簡(jiǎn)單了解以下幾點(diǎn)。
三方庫(kù)版本管理
npm 和 Yarn 都使用 package.json 來(lái)跟蹤項(xiàng)目的依賴(lài),版本號(hào)并非一直準(zhǔn)確,因?yàn)槟憧梢远x版本號(hào)范圍,npm的不同更新范圍,可能導(dǎo)致在擁有相同 package.json 文件的機(jī)器上安裝不同版本包,這可能導(dǎo)致一些差異的異常和沖突。
那npm有解決方式嘛?npm中可以使用 npm shrinkwrap生成一個(gè)版本鎖文件npm-shrinkwrap.json,在 npm install 時(shí)會(huì)在讀取 package.json 前先讀取這個(gè)文件,但是當(dāng)更新包版本時(shí),版本鎖文件并不會(huì)自動(dòng)更新,我們得手動(dòng)再次執(zhí)行npm shrinkwrap命令更新它。
那么Yarn有什么優(yōu)勢(shì)呢?每次添加或更新安裝庫(kù)包時(shí),Yarn 都會(huì)創(chuàng)建(或更新)yarn.lock 文件,這樣可以確保所有機(jī)器安裝相同版本包,同時(shí)支持 package.json 中定義的允許版本范圍,和npm的區(qū)別在于Yarn總會(huì)自動(dòng)更新 yarn.lock,而npm需要手動(dòng)更新。
并發(fā)安裝
npm通常是按順序一個(gè)一個(gè)安裝依賴(lài),而Yarn支持并行加載安裝多個(gè)三方庫(kù)包,所有其速度和效率都更快。
離線(xiàn)緩存
使用Yarn管理包時(shí),三方庫(kù)包存放在本地磁盤(pán),下次安裝將直接使用本地文件而不是再次下載,這也從另一方面使其安裝速度優(yōu)于npm。
簡(jiǎn)而言之就是,Yarn和npm使用方式幾乎一樣,但是其版本管理更方便,安裝速度更快,更有優(yōu)勢(shì),但是實(shí)際上它的所有三方庫(kù)包加載地址和npm都是統(tǒng)一的。
Webpack
我們使用Webpack打包工具作為項(xiàng)目的自動(dòng)化構(gòu)建工具,將JavaScript,CSS,圖片等資源都當(dāng)作JavaScript模塊(使用Webpack loader處理轉(zhuǎn)換)進(jìn)行統(tǒng)一管理,關(guān)于Webpack博主之前總結(jié)過(guò)兩篇文章,可以參考:
有了前文的鋪墊,本文就不打算展開(kāi)介紹Webpack的工作原理和具體配置,而計(jì)劃從項(xiàng)目實(shí)踐開(kāi)發(fā)和測(cè)試,打包層面思考如何更好的組織Webpack,如何使用Webpack提告項(xiàng)目開(kāi)發(fā),打包效率。
Webpack配置文件
首先我們?cè)诟夸浵聞?chuàng)建webpack.config.js
配置文件:
module.exports = function () { let env let _DEV_ = true // 開(kāi)發(fā)環(huán)境 let _PROD_ = false // 生產(chǎn)環(huán)境 switch (process.env.NODE_ENV) { case 'dev': env = 'dev' _DEV_ = true _PROD_ = false break case 'production': env = 'prod' _DEV_ = false _PROD_ = true break default: env = 'dev' _DEV_ = true _PROD_ = false } // 根據(jù)環(huán)境參數(shù)動(dòng)態(tài)決定引入對(duì)應(yīng)配置文件 return require(`./webpack/${env}.conf.js`)({ ROOTPATH: __dirname, _DEV_, _PROD_ }) }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。