最近臨時接了一個項目,須要快速搭建先後端環境,由於脫離團隊使用的框架來作,因此首選了一個比較成熟的方案來快速啓動 react 環境,省卻了許多配置 webpack 的煩惱。javascript
在這個環境下,Facebook 提供了一套不須要配置的 React 開發方案,即create-react-app。這個腳手架已經作好了基礎 webpack 配置,帶有自動更新,錯誤提示等等功能,僅僅須要建立,啓動就能夠快速開發。css
這時也不得不提早端社區的另外一個崛起者:yarn。前端
Yarn與 npm 同樣,是一款 NodeJS 包管理工具。 爲什麼要選擇使用 yarn 呢?官網的描述是:java
Yarn 會緩存它下載的每一個包,因此不須要重複下載。它還能並行化操做以最大化資源利用率,因此安裝速度之快史無前例。node
Yarn 在每一個安裝包的代碼執行前使用校驗碼驗證包的完整性。react
Yarn 使用一個格式詳盡但簡潔的 lockfile 和一個精確的算法來安裝,可以保證在一個系統上的運行的安裝過程也會以一樣的方式運行在其餘系統上。webpack
選用 Yarn 的緣由也是由於他的速度提高比npm 要快,使用yarn add <package-name>
,yarn remove <package-name>
增刪 node 包(對應npm install
和npm uninstall
).git
另外一點是,yarn 在更新以後,集成了create
, 經過yarn create
,能夠快速啓動一個項目。es6
yarn create react-app my-app
github
yarn create react-native-app my-app
yarn create next-app my-app
假設咱們須要建立一個demo-app
項目:
建立目錄yarn create react-app demo-app
稍等片刻,yarn 會爲咱們建立一個目錄,拉取依賴,wepack 的配置經過 yarn 來調用,能夠看到目錄結構很乾淨
安裝完後會有清晰的提示
開始開發:cd demo-app && yarn start
這時會啓動一個默認端口爲3000的頁面,若是端口衝突,會提示你是否選用另外一個端口
進入src
目錄開始開發便可
開發完成後須要發佈時,運行yarn build
進行編譯,發佈build
目錄
建立完成會自動生成build
文件夾,將 js,css 文件放入 static 目錄中
發佈build
目錄便可
三部曲完成,中間省略了很是多配置問題,給須要快速構建項目帶來了極大的便利性。固然,默認配置也許不可以知足全部需求,create-react-app
也提供了 拋出全部配置項的yarn eject
供給開發者使用,若是須要到調整 webpack 的內容,就須要使用到這個命令。不過這樣也會致使不能再回滾。官方的更新比較快,若是不是必要的狀況建議直接使用內置的行爲。
若是在項目開發過程當中須要 express 構建server 端應用,那麼開發模式就須要有小調整。
首先建立一個叫server
的文件夾和初始化 package.json
文件:
mkdir server && cd server && yarn init
增長依賴包
yarn add express body-parser nodemon babel-cli babel-preset-es2015
主要用到express
, body-parser
, nodemon
(檢測node.js 改動並自動重啓,適用於開發階段),babel-cli
和babel-preset-es2015
(以便使用 es6開發)
修改package.json
,增長npm scripts
{ "scripts": { "start": "nodemon --exec babel-node -- ./server.js", "build": "babel ./server.js --out-file server-compiled.js", "serve": "node server-compiled.js" } }
這裏使用nodemon
在開發階段檢測node.js 改動並自動重啓
發佈build
的時候則經過 babel
編譯成 es5的文件
create-react-app
會啓動一個靜態資源服務器,那麼同時須要進行 server 端的時候須要怎麼作呢?
咱們回過頭來去修改一下demo-app
目錄下的package.json
。
create-react-app
會默認添加好4段scripts
:
"scripts": { "start": "react-scripts start", "build": "react-scripts build", "test": "react-scripts test --env=jsdom", "eject": "react-scripts eject" }
咱們須要對 start
和build
作調整,以即可以同時啓動前端開發頁面以及後端服務。在這裏引入concurrently
這個包來執行兩條命令:
yarn add concurrently
package.json:
"scripts": { "react-start": "react-scripts start", "start": "concurrently 'yarn react-start' 'cd server && yarn start'", "react-build": "react-scripts build", "build": "concurrently 'yarn react-build' 'cd server && yarn build'", },
這樣,咱們只要執行yarn start
會同步啓動 webpack 以及 server文件夾下的 nodeman.
若是咱們在前端頁面用使用fetch(/api/data)
這樣 請求,默認是會發送到create-react-app 啓動的 localhost:3000/api/data
去的,沒法達到目的。爲了指向 server 端,須要指定proxy
:
假設 server 端 express 啓動了5000端口,則須要在package.json
中增長:
"proxy": "http://127.0.0.1:5000"
這時當你使用fetch(/api/data)
請求,則會指向到localhost:5000/api/data
輕鬆的開始開發吧~