摘要:微豆一個(gè)使用與重構(gòu)豆瓣的項(xiàng)目。在中的配置代理重新啟動(dòng),打開查看結(jié)果是否與直接請(qǐng)求豆瓣相同。更多請(qǐng)參考豆瓣電影文檔。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。
微豆 Vdo
一個(gè)使用 Vue.js 與 Material Design 重構(gòu) 豆瓣 的項(xiàng)目。
項(xiàng)目網(wǎng)站 http://vdo.ralfz.com/
GitHub https://github.com/RalfZhang/Vdo
快速使用# 克隆項(xiàng)目到本地 git clone https://github.com/RalfZhang/Vdo.git # 安裝依賴 npm install # 在 localhost:8080 啟動(dòng)項(xiàng)目 npm run dev教程 安裝 vue-cli 腳手架
運(yùn)行如下命令,即可創(chuàng)建一個(gè)名為 my-project 的 vue 項(xiàng)目,并且通過(guò)本地 8080 端口啟動(dòng)服務(wù)
npm install -g vue-cli vue init webpack my-project cd my-project npm install npm run dev
在運(yùn)行 vue init webpack my-project 后,會(huì)依次要求輸入以下配置內(nèi)容
項(xiàng)目名稱
項(xiàng)目描述
作者
選擇 Vue 構(gòu)建:運(yùn)行+編譯 或 僅運(yùn)行時(shí)
是否安裝 vue-loader
是否使用 ESLint
如果是,請(qǐng)選擇模式:標(biāo)準(zhǔn)模式、AirBNB 模式、自定義
是否使用 Karma + Mocha 的單元測(cè)試
是否使用 Nightwatch e2e 測(cè)試
安裝完成后,即可看到以下文件結(jié)構(gòu):
. |-- build // 項(xiàng)目構(gòu)建相關(guān)代碼 | |-- build.js // 生產(chǎn)環(huán)境構(gòu)建代碼 | |-- check-version.js // 檢查 node、npm 等版本 | |-- dev-client.js // 熱重載相關(guān) | |-- dev-server.js // 構(gòu)建本地服務(wù)器 | |-- utils.js // 構(gòu)建工具相關(guān) | |-- webpack.base.conf.js // webpack 基礎(chǔ)配置(出入口和 loader) | |-- webpack.dev.conf.js // webpack 開發(fā)環(huán)境配置 | |-- webpack.prod.conf.js // webpack 生產(chǎn)環(huán)境配置 |-- config // 項(xiàng)目開發(fā)環(huán)境配置 | |-- dev.env.js // 開發(fā)環(huán)境變量 | |-- index.js // 項(xiàng)目一些配置變量(開發(fā)環(huán)境接口轉(zhuǎn)發(fā)將在此配置) | |-- prod.env.js // 生產(chǎn)環(huán)境變量 | |-- test.env.js // 測(cè)試環(huán)境變量 |-- src // 源碼目錄 | |-- components // vue 公共組件 | |-- store // vuex 的狀態(tài)管理 | |-- App.vue // 頁(yè)面入口文件 | |-- main.js // 程序入口文件,加載各種公共組件 |-- static // 靜態(tài)文件,比如一些圖片,json數(shù)據(jù)等 |-- test // 自動(dòng)化測(cè)試相關(guān)文件 |-- .babelrc // ES6語(yǔ)法編譯配置 |-- .editorconfig // 定義代碼格式 |-- .eslintignore // ESLint 檢查忽略的文件 |-- .eslistrc.js // ESLint 文件,如需更改規(guī)則則在此文件添加 |-- .gitignore // git 上傳需要忽略的文件 |-- README.md // 項(xiàng)目說(shuō)明 |-- index.html // 入口頁(yè)面 |-- package.json // 項(xiàng)目基本信息 .ESLint 配置
ESLint 配置在根目錄的 .eslintrc.js 里。
正常情況下,ESLint 報(bào)錯(cuò)是因?yàn)槟愕拇a不符合現(xiàn)有的 ESLint 規(guī)范。
如果你的情況實(shí)在不想被 ESLint 報(bào)錯(cuò),我舉出兩個(gè)解決方案,來(lái)處理 ESLint 報(bào)錯(cuò)問(wèn)題。
注:本例使用 AirBNB ESLint 規(guī)則。
例:通過(guò) npm run dev 啟動(dòng)服務(wù),打開 ./src/main.js,添加一句 console.log("abc"),結(jié)果如下:
import Vue from "vue"; import App from "./App"; import store from "./vuex/store"; /* import router from "./router";*/ // 添加此句 console.log("abc") /* eslint-disable no-new */ new Vue({ el: "#app", /* router,*/ template: "", components: { App }, store, });
注:為做演示,句末未添加分號(hào)。
保存 main.js 文件后,頁(yè)面與終端均提示如下錯(cuò)誤:
ERROR Failed to compile with 1 errors error in ./src/main.js ? http://eslint.org/docs/rules/no-console Unexpected console statement C:UsersRalfDocumentscode alfzvue estvue02srcmain.js:8:1 console.log("abc") ^ ? http://eslint.org/docs/rules/semi Missing semicolon C:UsersRalfDocumentscode alfzvue estvue02srcmain.js:8:19 console.log("abc") ^ ? 2 problems (1 error, 1 warning) Errors: 1 http://eslint.org/docs/rules/semi Warnings: 1 http://eslint.org/docs/rules/no-console @ multi ./build/dev-client ./src/main.js
以上輸出表明出現(xiàn)兩個(gè)問(wèn)題:
警告:不允許 console 語(yǔ)句。
錯(cuò)誤:句末未加分號(hào)。
解決問(wèn)題 1
在 .eslintrc.js 文件中的 rules 鍵名下添加"no-console": "off",,即關(guān)閉 console 警告。
解決問(wèn)題 2
你可以選擇繼續(xù)在 .eslintrc.js 文件中添加關(guān)閉句末分號(hào)判定的規(guī)則。
或者,也可以把 package.json 文件中的 script 下的 lint 命令改為
"lint": "eslint --fix *.js *.vue src/* test/unit/specs/* test/e2e/specs/*"
即自動(dòng)修復(fù)。值得注意的是,自動(dòng)修復(fù)不能解決所有問(wèn)題,有時(shí)也不甚完美,可以多試幾次體會(huì)下 fix 的效果。
做完更改后,重新運(yùn)行 npm run dev 即可看到無(wú)問(wèn)題報(bào)告,并且 console 語(yǔ)句后已經(jīng)自動(dòng)加上了分號(hào)。
靜態(tài)頁(yè)面開發(fā)此時(shí),瀏覽器應(yīng)該已經(jīng)打開了 localhost:8080 頁(yè)面。
在此情況下,請(qǐng)嘗試更改 /src/App.vue 和 /src/components/Hello.vue 文件中標(biāo)簽內(nèi)的內(nèi)容,保存后即可立即看到瀏覽器頁(yè)面已自動(dòng)更新了你做出的改動(dòng)。
接下來(lái),你需要去閱讀并學(xué)習(xí) Vue.js 教程頁(yè)面,務(wù)必熟悉 基礎(chǔ) 部分的內(nèi)容,掌握 組件 章節(jié)。
熟悉之后,便可以完成基礎(chǔ)的靜態(tài)頁(yè)面(或者說(shuō)是組件)設(shè)計(jì)工作。
本項(xiàng)目使用了基于 Vue 2.0 和 Material Desigin 的 UI 組件庫(kù) Muse-UI。
提示:./src/components 文件夾多用于保存公用組件。至于頁(yè)面組件,推薦在新建 ./src/view 文件夾后存放于此。
vue-router 2 使用當(dāng)一個(gè)個(gè)靜態(tài)組件完成后,需要按照路由組織這些組件文件。
請(qǐng)前往 vue-router 2 介紹 閱讀 基礎(chǔ) 部分教程,并可以邊閱讀邊配置路由。
路由文件是 ./src/router.index.js 。
本項(xiàng)目中使用了 HTML5 History 模式,路由配置比較簡(jiǎn)單,可以參考。
API 請(qǐng)求轉(zhuǎn)發(fā)配置至此,你應(yīng)該已經(jīng)完成了所有的靜態(tài)頁(yè)面的工作,接下來(lái)我們準(zhǔn)備搭建請(qǐng)求,為后面的 xhr 請(qǐng)求做好準(zhǔn)備。
打開 http://api.douban.com/v2/movie/in_theaters 查看接口數(shù)據(jù),留意此地址。
在 ./config/index.js 中的 proxyTable 配置代理:
proxyTable: { "/api": { target: "http://api.douban.com/v2", changeOrigin: true, pathRewrite: { "^/api": "" } } }
重新啟動(dòng) npm run dev,打開 localhost:8080/api/movie/in_theaters 查看結(jié)果是否與直接請(qǐng)求豆瓣 API 相同。
本應(yīng)該使用了以下 API:
/v2/movie/search?q={text} 電影搜索api;
/v2/movie/in_theaters 正在上映的電影;
/v2/movie/coming_soon 即將上映的電影;
/v2/movie/subject/:id 單個(gè)電影條目信息。
更多請(qǐng)參考 豆瓣電影 API 文檔。
這樣我們就可以在應(yīng)用中調(diào)用 /api/movie/in_theaters 來(lái)訪問(wèn) http://api.douban.com/v2/movie/in_theaters,從而解決跨域的問(wèn)題。
使用 axiosaxios 庫(kù)使用起來(lái)相當(dāng)簡(jiǎn)單。
你可以在單個(gè)組件中嘗試引入并調(diào)用:
import axios from "axios"; axios.get("/v2/movie/in_theaters", { "city": "廣州" }) .then((result) => { console.log(result); });
這里,可以用返回的 result 去更新 data(){ } 中 return 的數(shù)據(jù)。
使用 Vuex 并分離代碼更多 axios 用法請(qǐng)參考 文檔
為了試代碼更加結(jié)構(gòu)化,我們應(yīng)當(dāng)將數(shù)據(jù)請(qǐng)求和視圖分離。
這一節(jié)中,我們有兩個(gè)任務(wù)要做:
分離數(shù)據(jù)請(qǐng)求層邏輯。
使用 Vuex 管理狀態(tài)。
將二者放到同一節(jié)中主要是因?yàn)槎咴偻荒夸浵拢覀儊?lái)查看 ./store 文件夾的結(jié)構(gòu):
. |-- store // 數(shù)據(jù)處理根目錄 | |-- movies // 單個(gè)電影模塊文件夾 | | |-- api.js // 電影模塊對(duì)外開放的接口 | | |-- module.js // Vuex 模塊 | | |-- type.js // Vuex 操作 key | |-- base.js // 基礎(chǔ)方法 | |-- store.js // Vuex 入口 .
針對(duì)第一個(gè)任務(wù):
base.js 存放封裝的基礎(chǔ)請(qǐng)求函數(shù)
**/api.js 存放該模塊下公開的請(qǐng)求函數(shù)
針對(duì)第二個(gè)任務(wù),我們需要先了解 Vuex。
請(qǐng)查看 Vuex 文檔,了解其 核心概念。
Vuex 是一個(gè)專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式。它采用集中式存儲(chǔ)管理應(yīng)用的所有組件的狀態(tài),并以相應(yīng)的規(guī)則保證狀態(tài)以一種可預(yù)測(cè)的方式發(fā)生變化。Vuex 也集成到 Vue 的官方調(diào)試工具 devtools extension,提供了諸如零配置的 time-travel 調(diào)試、狀態(tài)快照導(dǎo)入導(dǎo)出等高級(jí)調(diào)試功能。
其實(shí)在我看來(lái),Vuex 相當(dāng)于某種意義上設(shè)置了讀寫權(quán)限的全局變量,將數(shù)據(jù)保存保存到該“全局變量”下,并通過(guò)一定的方法去讀寫數(shù)據(jù)。(希望這能幫助你理解 Vuex)
為了方便模塊化管理:
我將 store.js 作為入口文件,去掛載各個(gè)模塊;
/movies/文件夾下為電影相關(guān)的模塊;
/movies/moudule.js 為電影模塊的主要 Vuex 文件;
/movies/type.js 為使用常量替代 Mutation 事件類型的實(shí)現(xiàn)。
到此便完成了所有開發(fā)上的基礎(chǔ)問(wèn)題。
發(fā)布運(yùn)行 npm run build,即可在生成的 /dist 文件夾下看到所有文件。
將文件復(fù)制到你的服務(wù)器上某個(gè)目錄(我的是/var/www/Vdo/dist),按照下一節(jié)配置 Nginx 即可
提示:可以使用 scp 命令將本地文件拷貝至服務(wù)器,例如 scp -P 20 -r dist user@host:/target/location
附:配置與開啟 Nginx注:以下以 CentOS 為例
安裝 Nginx:yum install nginx
打開 /etc/nginx/conf.d/default.conf
替換全文為本項(xiàng)目 /doc/nginx.conf 文件中的內(nèi)容
運(yùn)行 nginx
提示:
403 Forbidden 錯(cuò)誤可能是由于文件和文件夾權(quán)限引起的,請(qǐng)用 chmod 把存放 index.html 的所有路徑上的文件夾權(quán)限設(shè)置為 755,并將 index.html 文件權(quán)限設(shè)置成 644 即可。
更改 Nginx 配置文件后,可以使用 nginx -s reload 命令刷新。
結(jié)語(yǔ)至此,主體工作已經(jīng)完成。
歡迎 Star 本項(xiàng)目。
https://github.com/RalfZhang/Vdo
感謝&參考https://github.com/superman66...
http://blog.guowenfh.com/2016...
http://vuejs-templates.github...
https://github.com/mzabriskie...
https://museui.github.io/
https://vuejs-templates.githu...
LicenseMIT
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/82069.html
摘要:本項(xiàng)目是一個(gè)簡(jiǎn)單的全棧項(xiàng)目,前端新手可以拿來(lái)練練手。項(xiàng)目實(shí)現(xiàn)了一些簡(jiǎn)單的功能,后臺(tái)可以對(duì)圖書進(jìn)行錄入錄出掃碼或手動(dòng),前臺(tái)顯示錄入的圖書,并且前臺(tái)注冊(cè)登錄后可以將書的訂單發(fā)給服務(wù)器,并存到服務(wù)器。 Vue-book 2.0 Github 地址:https://github.com/percy507/v... 【覺得不錯(cuò)就來(lái)個(gè) star 吧 ^_^】 說(shuō)明(菜鳥請(qǐng)進(jìn),大神繞道 ~) 前端...
摘要:本項(xiàng)目是一個(gè)簡(jiǎn)單的全棧項(xiàng)目,前端新手可以拿來(lái)練練手。項(xiàng)目實(shí)現(xiàn)了一些簡(jiǎn)單的功能,后臺(tái)可以對(duì)圖書進(jìn)行錄入錄出掃碼或手動(dòng),前臺(tái)顯示錄入的圖書,并且前臺(tái)注冊(cè)登錄后可以將書的訂單發(fā)給服務(wù)器,并存到服務(wù)器。 Vue-book 2.0 Github 地址:https://github.com/percy507/v... 【覺得不錯(cuò)就來(lái)個(gè) star 吧 ^_^】 說(shuō)明(菜鳥請(qǐng)進(jìn),大神繞道 ~) 前端...
平日學(xué)習(xí)接觸過(guò)的網(wǎng)站積累,以每月的形式發(fā)布。2017年以前看這個(gè)網(wǎng)址:http://www.kancloud.cn/jsfron... 1. Javascript 前端生成好看的二維碼 十大經(jīng)典排序算法(帶動(dòng)圖演示) 為什么知乎前端圈普遍認(rèn)為H5游戲和H5展示的JSer 個(gè)人整理和封裝的YU.js庫(kù)|中文詳細(xì)注釋|供新手學(xué)習(xí)使用 擴(kuò)展JavaScript語(yǔ)法記錄 - 掉坑初期工具 漢字拼音轉(zhuǎn)換...
平日學(xué)習(xí)接觸過(guò)的網(wǎng)站積累,以每月的形式發(fā)布。2017年以前看這個(gè)網(wǎng)址:http://www.kancloud.cn/jsfron... 1. Javascript 前端生成好看的二維碼 十大經(jīng)典排序算法(帶動(dòng)圖演示) 為什么知乎前端圈普遍認(rèn)為H5游戲和H5展示的JSer 個(gè)人整理和封裝的YU.js庫(kù)|中文詳細(xì)注釋|供新手學(xué)習(xí)使用 擴(kuò)展JavaScript語(yǔ)法記錄 - 掉坑初期工具 漢字拼音轉(zhuǎn)換...
平日學(xué)習(xí)接觸過(guò)的網(wǎng)站積累,以每月的形式發(fā)布。2017年以前看這個(gè)網(wǎng)址:http://www.kancloud.cn/jsfron... 1. Javascript 前端生成好看的二維碼 十大經(jīng)典排序算法(帶動(dòng)圖演示) 為什么知乎前端圈普遍認(rèn)為H5游戲和H5展示的JSer 個(gè)人整理和封裝的YU.js庫(kù)|中文詳細(xì)注釋|供新手學(xué)習(xí)使用 擴(kuò)展JavaScript語(yǔ)法記錄 - 掉坑初期工具 漢字拼音轉(zhuǎn)換...
閱讀 3063·2023-04-26 00:40
閱讀 2408·2021-09-27 13:47
閱讀 4270·2021-09-07 10:22
閱讀 2977·2021-09-06 15:02
閱讀 3323·2021-09-04 16:45
閱讀 2510·2021-08-11 10:23
閱讀 3612·2021-07-26 23:38
閱讀 2910·2019-08-30 15:54