摘要:基本開發環境創建的項目,作為代碼編寫工具插件推薦插件配置文章目錄項目目錄結構介紹框架選擇處理請求二次封裝項目目錄結構簡介業務相關靜態文件全局組件基礎樣式布局樣式及工具引入請求配置路由全局狀態管理工具文件入口文件主要配置文件頁面檢查配置測試
基本開發環境
vue-cli3 創建的項目,vscode 作為代碼編寫工具
vscode插件推薦:vscode 插件配置
1. 項目目錄結構簡介項目目錄結構介紹
UI 框架選擇
main,js 處理
axios 請求二次封裝
├── public // index.html ├── src // 業務相關 │ ├── assets // 靜態文件(css, images) │ ├── components // 全局組件 │ ├── layouts // 基礎樣式布局 │ ├── plugin // 樣式及工具引入 │ ├── request // 請求配置 │ ├── router // 路由 │ ├── store // 全局狀態管理 │ ├── utils // 工具文件 │ ├── app.vue // 入口文件 │ ├── main.js // 主要配置文件 │ └── views // 頁面 ├── .eslintrc.js // eslint 檢查配置 ├── .env.release // 測試環境變量 ├── .env.pre-build // 預發環境變量 └── vue.config.js // webpack 打包配置2. UI 框架選擇
經框架選擇驗證對比 element,iview,ant-design-vue
最終選擇 ant-design-vue,傳送門 https://vue.ant.design/docs/vue/introduce-cn/
3. main.js 分散處理好看
文檔清晰
使用方便,示例清晰
bug少,組件使用順滑
性能較好,有單例測試
main.js 作為操作入口,很多東西需要引入,代碼體積過大,需要進行優化,邏輯清晰,方便文虎
新建一個文件夾 plugin,存放所有需要引入的 main.js 掛載的組件、方法、第三方庫
ant-design.js
按照官方推薦,按需引入
優點: 我們開發項目不一定能使用到所有的組件,這樣引入減小項目體積
import Vue from "vue" import { ConfigProvider, Pagination, Steps, Cascader, Row, Col, Table } from "ant-design-vue" import "ant-design-vue/dist/antd.less" Vue.use(ConfigProvider) Vue.use(Steps) Vue.use(Cascader) Vue.use(Row) Vue.use(Col) Vue.use(Table)
func.js
自定義的一些方法,掛到 vue 原型上
import Vue from "vue" import api from "@/request/api" import { isInvalid, isValid } from "@/utils/verify" // 請求接口 Vue.prototype.$api = api // 驗證工具 Vue.prototype.$isInvalid = isInvalid Vue.prototype.$isValid = isValid
這樣,分散幾個文件,然后將他們統一引入到 index.js 中
import "./ant-design.js" import "./func.js" import "./moment"
最后放入 main.js,整個世界都清晰簡單了
`import "./plugin"`
收到評論區大神提醒,研究了一下 webpack 中的 require.context
require.context 是 webpack 中,用來創建自己的(模塊)上下文
webpack 會在構建的時候解析代碼中的 require.context()
require.context(directory, useSubdirectories = false, regExp = /^/) 函數接收三個參數:
要搜索的文件夾目錄
是否還應該搜索它的子目錄
以及一個匹配文件的正則表達式
// 語法 require.context(directory, useSubdirectories = false, regExp = /^.//); // 示例 require.context("./test", false, /.test.js$/);
所以,在 main.js 中,直接可以注冊我所有的自定義組件,非常簡單
// 自定義組件 const requireComponents = require.context("@v/components", true, /.vue$/) // 打印結果 // 遍歷出每個組件的路徑 requireComponents.keys().map(fileName => { // 獲取組件配置 const componentConfig = requireComponents(fileName) // 剝去文件名開頭的 `./` 和`.vue`結尾的擴展名 const componentName = fileName.replace(/^.//, "").replace(/.vue$/, "") // 全局注冊組件 Vue.component( componentName.replace(///, "-"), // 如果這個組件選項是通過 `export default` 導出的,那么就會優先使用 `.default`,否則回退到使用模塊的根。 componentConfig.default || componentConfig ) })4. axios 請求二次封裝
axios 不過多介紹,上干貨
新建文件 axios
請求攔截器
根據自己業務需求,修改請求頭以及超時時間等
import axios from "axios" axios.interceptors.request.use( config => { // 判斷是否是提交文件,還是常規請求 if (config.data instanceof FormData) { config.headers = { "Content-Type": "multipart/form-data" // 此處格式自定義 } } else { config.data = JSON.stringify(config.data) config.headers = { "Content-Type": "application/json", // 此處格式自定義 token: getLocalStorage("token") } } config.withCredentials = true config.timeout = 5000 // 超時時間 return config }, error => { return Promise.reject(error) } )
響應攔截器
根據后臺返回數據,做些統一處理
// 添加響應攔截器 axios.interceptors.response.use( res => { let data = res.data if (res.statusCode !== 200) { if (data.failureReason === 4011 || data.failureReason === 4012) { console.log("需要重新登錄") } } else { if (data.resultStates === 0) { return data } else { return Promise.reject(data) } } }, error => { notification["error"]({ message: "提示", duration: 2, description: "后臺報錯" }) // 對響應錯誤做點什么 return Promise.reject(error) } )
封裝get,post,并導出
export function get (url, params = {}) { return new Promise((resolve, reject) => { axios .get(url, { params: params }) .then(response => { if (response.success) { resolve(response.data) } }) .catch(err => { reject(err) }) }) } /** * 封裝post請求 * @param url * @param data
*/ export function post (url, data = {}) { return new Promise((resolve, reject) => { axios.post(url, data).then( response => { if (response.success) { resolve(response.data) } }, err => { reject(err) } ) }) } ```
重點:新建 api.js 文件
將后臺請求接口全部寫在此處,統一管理
import { get, post } from "./axios" const api = { reqLogin: p => post("api/user/addFormId", p), reqGetInfo: p => post("api/user/addFormId", p) } export default api // 將 api 引入到 main.js 中 Vue.prototype.$api = api // 這樣頁面中使用 this.$api.reqLogin().then(res => { console.log(res) })
是不是非常方便?鼓掌 啪啪啪啪......
web 前端群招人,有夢想的一群小青年 https://www.jianshu.com/p/33eee1c26b8a
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/109519.html
摘要:五六月份推薦集合查看最新的請點擊集前端最近很火的框架資源定時更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語。葉上初陽乾宿雨,水面清圓,一一風荷舉。家住吳門,久作長安旅。五月漁郎相憶否。小楫輕舟,夢入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請::點擊::集web前端最近很火的vue2框架資源;定時更新,歡迎 Star 一下。 蘇...
摘要:五六月份推薦集合查看最新的請點擊集前端最近很火的框架資源定時更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語。葉上初陽乾宿雨,水面清圓,一一風荷舉。家住吳門,久作長安旅。五月漁郎相憶否。小楫輕舟,夢入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請::點擊::集web前端最近很火的vue2框架資源;定時更新,歡迎 Star 一下。 蘇...
摘要:特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入匯總深似海。還有很多不足&遺漏的地方,歡迎補充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應和斧正,會及時更新,平時業務工作時也會不定期更...
摘要:是目前唯一一個支持同步調用的跨平臺年度上最多的個項目前端掘金年接近尾聲,在最近的幾篇文章中,會整理總結一些年度開源項目。 JS 全棧教程 - 前端 - 掘金本課程是基于阮一峰的 js 全棧教程的視頻版本,免費供大家觀看... 2016 年 10 個最佳的 CodePen 作品 - 前端 - 掘金說到 CodePen,前端開發者們肯定不會陌生。如果說 Dribbble 是設計師們聚集的圣...
閱讀 3490·2021-11-18 10:07
閱讀 1589·2021-11-04 16:08
閱讀 1512·2021-11-02 14:43
閱讀 1088·2021-10-09 09:59
閱讀 844·2021-09-08 10:43
閱讀 1079·2021-09-07 09:59
閱讀 962·2019-12-27 11:56
閱讀 1011·2019-08-30 15:56