日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

mpvue小程序架构搭建详细介绍

發布時間:2024/9/21 vue 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mpvue小程序架构搭建详细介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

為什么80%的碼農都做不了架構師?>>> ??

前言

mpvue小程序框架搭建很容易,官網提供vue init mpvue/mpvue-quickstart my-project, 很迅速的創建項目,但是想要結合業務等,還是要廢一番功夫,今天來學學wx.request的封裝,mpvue的重構,如何搭建好用的mpvue小程序架構吧

創建項目

  • 由于國內npm鏡像慢的原因,考慮先把npm切到淘寶鏡像。
  • npm set registry https://registry.npm.taobao.org/
  • 全局安裝vue-cli
  • npm install --global vue-cli@2.9
  • 創建一個基于 mpvue-quickstart 模板的新項目, 一路回車選擇默認就可以了
  • vue init mpvue/mpvue-quickstart mpvue-project
  • 安裝依賴
  • cd mpvue-project npm install npm run dev

    到這里,你的項目已經能跑起來了,可以打開小程序調試工具預覽效果,但是僅僅是能玩兒而已,下面更精彩。

    <!--more-->

    全局圖片,接口配置

  • 找到項目(mpvue-project)下方的config->index.js文件,里面有兩個對象,build和dev,分別對應生產環境和開發環境,意思是你運行npm run dev讀的就是dev里面變量,npm run bulid讀的就是build的變量 這里我增加了3個變量,后續用到(這里的圖片端口就是上圖中的port) 接口請求地址(如:baseApi: 'http://www.javanx.cn/rest') 圖片訪問地址(如:imgPath: 'http://localhost:8070') web-view地址(如:baseUrl: 'http://www.javanx.cn/')

  • 來到項目(mpvue-project)下方的build->utils.js文件,添加下方代碼

  • var config = require('../config') const fs = require('fs');var imgUrlPrefix = process.env.NODE_ENV === 'production'? config.build.imgPath: config.dev.imgPath var cssImgStr = `$imgUrlPrefix = '` + imgUrlPrefix + `';`;fs.writeFileSync(`./src/css/imgUrlPrefix.styl`, cssImgStr);const BASE_API = process.env.NODE_ENV === 'production'? config.build.baseApi: config.dev.baseApi; const BASE_URL = process.env.NODE_ENV === 'production'? config.build.baseUrl: config.dev.baseUrl;fs.writeFileSync(`./src/commons/baseApi.js`, `module.exports = {IMG_API: '`+imgUrlPrefix+`', BASE_API: '`+BASE_API+`', BASE_URL: '`+BASE_URL+`'}\r\n`);

    process.env.NODE_ENV是判斷你輸入的命令是什么(構建到dev還是生產),然后寫入兩個文件,一個是styl文件,一個是js文件,分別存放根據環境的全局變量 用到的地方之間引入這兩個文件,如:

    index.styl中需要用到一個圖片

    @require "./imgUrlPrefix.styl" .icon-more-rightposition absolutedisplay blockwidth px2rpx(44px)height px2rpx(44px)right 0top 50%margin-top px2rpx(-22px)background url($imgUrlPrefix + "/images/right.png") center no-repeatbackground-size 100% 100%

    index.js中需要用到BASE_API,如

    import {BASE_API} from './baseApi'

    圖片這樣的好處是,圖片都不用打包到項目里面了,減少了小程序的體積,本身小程序體積有限。 所以就可以去掉打包static到dist的配置了 來到項目(mpvue-project)下方的build->webpack.base.conf.js文件,去掉下方代碼

    new CopyWebpackPlugin([{from: path.resolve(__dirname, '../static'),to: path.resolve(__dirname, '../dist/static'),ignore: ['.*']} ])

    封裝wx.request

    取名叫http.js

    import Loading from './gloading' import {BASE_API} from './baseApi'const gloading = new Loading({sync: true }) function request (options) {return new Promise((resolve, reject) => {// 遮罩,默認不顯示菊花if (options.mask) {// 這里寫菊花轉gloading.start()// delete options.mask;}const headers = (options.header = options.header || {})// 是否要設置tokenif (!options.noToken && options.token !== false) {// headers['x-auth-token'] = 'ad6b5cbd-010e-4dee-aabc-884790d1e288';headers['x-auth-token'] = wx.getStorageSync('x-auth-token')delete options.token}// 對所有request請求中的OBJECT參數對象統一附加時間戳屬性options.timestamp = +new Date()let url = options.url// 簡化類型設置if (options.json === false) {headers['content-type'] ='application/x-www-form-urlencoded; charset=UTF-8'delete options.json}url = BASE_API + urlwx.request({url: url,data: options.data,header: headers,method: options.method,success: (res) => {if (options.mask) {gloading.stop()}if (res.statusCode === 200) {resolve(res)} else {// 判斷錯誤碼// 比如這里1003是用戶登錄過期,token是否失效switch (res.data.code) {case 1003:console.log('------------token變更,重新授權-----------')var pages = global.getCurrentPages() // 獲取加載的頁面var currentPage = pages[pages.length - 1] // 獲取當前頁面的對象var url = currentPage.route // 當前頁面url// 調用授權登錄接口,獲取新的tokenauthorize(() => {// 獲取用戶信息,驗證新tokengetUserInfo((data) => {// 成功代表成功,跳轉到之前的頁面console.log('------------獲取用戶信息成功-----------')wx.redirectTo({url: '/' + url + ''})}, (err) => {// 失敗跳回登錄頁面console.log('-----------獲取用戶信息失敗------------')if (url !== 'pages/user/login' && err.data.code === 1003) {wx.showToast({icon: 'none',mask: true,title: res.data.message,duration: 3000})wx.redirectTo({url: '/pages/user/login'})}})})breakdefault:let message = res.data.messagewx.showToast({icon: 'none',mask: true,title: res.data.message,duration: 3000})}reject(res)}},fail: (res) => {reject(res)},complete: (res) => {if (options.mask) {gloading.stop()}}})}) }request.all = (arr) => {return Promise.all(arr.map(n => request(n))) } export default request

    這里的authorize和getUserInfo方法需要自己去寫具體業務,同時上面用到的wx.getStorageSync('x-auth-token')是在authorize方法成功后,返回的token,存在Storage里面了wx.setStorageSync('x-auth-token', res.header['x-auth-token']) 上面用到了一個gloading插件

    gloading插件

    取名gloading.js

    class Loading {constructor (options) {this.queueNum = 0options = this._options = options || {}if (!options.title) {options.title = '請等待...'}}start () {if (this._options.sync) {this.queueNum += 1}this._start()return this}_start () {wx.showLoading({title: this._options.title,mask: true})}stop (force) {if (this._options.sync) {this.queueNum -= 1}if (this.queueNum <= 0 || force) {this.queueNum = 0this._stop()}return this}_stop () {wx.hideLoading()} } export default Loading

    去掉目錄的main.js

    mpvue每個頁面必須對應一個main.js,導致每個頁面都需要建一個目錄,目錄下方建一個main.js,感覺非常的繁瑣 有大神開發了mpvue-entry插件

  • 安裝插件
  • npm install mpvue-entry
  • 來到項目(mpvue-project)下方的build->webpack.base.conf.js文件
  • const MpvueEntry = require('mpvue-entry')module.exports = {entry: MpvueEntry.getEntry('src/pages.js'),...plugins: [new MpvueEntry(),...] }
  • src目錄下新建pages.js
  • module.exports = [{path: 'pages/news/list', // 頁面路徑,同時是 vue 文件相對于 src 的路徑,必填config: { // 頁面配置,即 page.json 的內容,可選navigationBarTitleText: 'Javan的博客',enablePullDownRefresh: true} }]

    這樣就沒有建n個目錄,n個main.js了

    公告

    喜歡小編的可以點擊關注,也可在下方評論留言,你喜歡什么內容,小編根據大家喜歡的內容嘗試更新,更多內容請點擊:Javan的博客

    轉載于:https://my.oschina.net/javanx/blog/1994354

    總結

    以上是生活随笔為你收集整理的mpvue小程序架构搭建详细介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 日本一区二区三区免费视频 | www四虎| 一区二区三区四区在线播放 | 亚洲视频在线免费播放 | av网址在线看 | 99精品国产免费 | 日韩国产传媒 | 男人操女人的网站 | 少妇激情网 | 制服丝袜一区二区三区 | 亚洲国产v | www.色国产 | 日韩中文久久 | 免费不卡视频 | 国产中文一区二区 | 四虎在线免费 | 成人观看网站 | 久久99精品久久久久 | 国产中文字幕久久 | 无码人妻一区二区三区一 | 99黄色片 | 色噜噜亚洲 | 欧美国产日韩在线 | 亚洲AV午夜福利精品一级无码 | 色射色| 中文字幕一区二区三区人妻 | 国产精品色综合 | 男人的天堂亚洲 | 日批视频在线 | av黄页| 黑人专干日本人xxxx | 欧美激情图区 | 国产精品电影一区 | 国产美女久久久久 | 久久六 | 按摩害羞主妇中文字幕 | 亚洲自拍偷拍精品视频 | 欧美一级片观看 | 中文字幕在线播放一区 | 成年人免费在线观看视频网站 | 日本三级韩国三级三级a级按摩 | 久久伊人国产 | 日韩国产亚洲欧美 | 在线视频欧美一区 | 九色视频91 | 精品99在线| 中文在线字幕免费观 | 精品一区国产 | 超污巨黄的小短文 | 日本一区二区视频免费 | 999xxxx| 韩国成人免费视频 | 欧洲最强rapper网站直播 | 国产av成人一区二区三区 | 日韩色视频在线观看 | 亚洲成av人片一区二区 | 久久久久久亚洲精品 | 日日操夜夜操视频 | 99精品影视 | 欧美日韩精品在线播放 | 久久久久久久久久久久久久免费看 | 成人在线免费观看视频 | 亚洲av综合av一区二区三区 | 男人操女人动漫 | 日韩一卡二卡 | 久久久久久免费视频 | 成人无码www在线看免费 | 中文国产视频 | 日本不卡一区在线 | 亚洲福利社区 | 欧美久久精品 | 国产69精品久久久 | 国产日韩欧美自拍 | 在线观看三级视频 | 日本亚洲高清 | 国产精品破处 | 国产精品免费视频一区 | 日本激情视频在线观看 | 日韩乱码人妻无码中文字幕久久 | 国产 一二三四五六 | h片在线免费观看 | 第五色婷婷 | 天天射天天干天天 | 亚洲作爱视频 | 老司机福利院 | 伊人色在线视频 | 亚洲AV成人无码一二三区在线 | 亚洲精品久久久久久久久久 | 天天干天天插天天操 | 亚洲精品高清视频 | 最新中文字幕在线观看视频 | 黄色在线免费网站 | 国产视频你懂得 | 在线播放一级片 | 99精品国自产在线 | 一本一道人人妻人人妻αv 九一在线视频 | 91爱国产 | 最近最经典中文mv字幕 | 婷婷看片|