记一次微信公众号开发过程

关于技术选型

之前一直做APP开发,虽然期间做过几个简单前端和混合开发项目,懂得一些前端的基本知识,但毕竟不是专业,所以本次选型就按照目前比较流行的或者自己感兴趣的来吧
1.因为之前使用过Vue,并且考虑到现在前端框架的流行程度,所以框架选用Vue
2.因为是做微信公众号开发,并且考虑到开发周期和自己的CSS水平,选择了VUX作为UI组件库,VUX是基于weui进行开发的
3.网络请求方面,因为之前一直使用ajax所以选择axios,坦白来说好像也只用过axios,如果大神们有什么更好的记得推荐
4.关于css预编译,之前一直使用less,但最近Sass貌似有点儿火,所以决定尝试一下Sass
5.关于IDE的选择,最近VS code比较火,所以决定尝试一下

开发前准备

安装和配置VS Code

去官网下载对应版本安装 官网地址

关于使用过程的问题

以下问题都在安装完对应扩展程序后 ,通过文件—首选项—设置—用户设置进行相关设置
安装扩展程序分方式 如下图
在这里插入图片描述

  • 汉化问题

    • 安装扩展程序Chinese
    • 【Ctrl+Shift+p】在输入框中输入“configure display language”
    • 重启VS
      修改语言设置
      选择语言
  • vue ESLint语法检测问题
    安装扩展程序 ESLint和Prettier - Code formatter,并在Setting.json 中以下配置

      "eslint.validate": [
      "javascript",
      "javascriptreact",
      {
        "language": "vue",
        "autoFix": true
      },
      {
        "language": "html",
        "autoFix": true
      } ]// #每次保存的时候自动格式化 
    "editor.formatOnSave": true,
    // #每次保存的时候将代码按eslint格式进行修复
    "eslint.autoFixOnSave": true,
    //  #让prettier使用eslint的代码格式进行校验 
    "prettier.eslintIntegration": true,
    //  #去掉代码结尾的分号 
    "prettier.semi": false,
    //  #使用带引号替代双引号 
    "prettier.singleQuote": true,
    //  #让函数(名)和后面的括号之间加个空格
    "javascript.format.insertSpaceBeforeFunctionParenthesis": true
    
  • 修改字体大小,保存自动格式化

     {
    "editor.fontSize": 16,
    "window.zoomLevel": 1,
    // vscode默认启用了根据文件类型自动设置tabsize的选项
    "editor.detectIndentation": false,
    // 重新设定tabsize
    "editor.tabSize": 2
    }
    
  • html标签换行问题

    // #这个按用户自身习惯选择 
    "vetur.format.defaultFormatter.html": "js-beautify-html",
    // #让vue中的js按编辑器自带的ts格式进行格式化 
    "vetur.format.defaultFormatter.js": "vscode-typescript",
    "vetur.format.defaultFormatterOptions": {
     "js-beautify-html": {
       "wrap_attributes": "auto"
       // #vue组件中html代码格式化样式
     }
    }
    "vetur.validation.template": false
    

开发环境搭建

安装node.js,npm(windows环境)

node.js安装后会自带npm命令

  • 官网下载一个node.js稳定版本点击进行安装
  • 安装完成后进入cmd 输入 path check一下node环境变量的配置
     C:\Program Files\nodejs\;
    
  • node -version检查一下node.js的版本
    在这里插入图片描述

全局安装Vue脚手架

npm install vue-cli -g 

利用vue-cli+webpack搭建项目

 vue init webpack   vue-cli-demo   // 初始化项目  vue-cli-demo 项目文件夹名称
 cd vue-cli-demo   //跳转到刚才所创建的项目文件夹内
 npm install   
 npm run dev  //测试项目是否搭建完成

安装Sass

项目构建完成后,要利用Sass预编译css,所以需要在项目中进行相关配置

  • 在项目中安装Sass
    要在项目中安装Sass需要一下两步
    npm install node-sass --save-dev   //安装node-sass
    npm install sass-loader --save-dev  //安装 sass-loader
    
  • 修改刚才创建好的vue项目中的webpack.base.conf.js文件
    在rules下添加以下代码
    module: {
      rules: [
        {
          test: /.sass$/,
          loaders: ['style', 'css', 'sass']
        }
      ]
    }
    

最后再给大家介绍几个css相关的名词

  • postcss:添加浏览器前缀
  • sass scss less:预处理CSS

关于axios的使用问题

  • 安装和配置请参考官网Github
  • 开发环境跨域问题
    • config /index.js
    proxyTable: {
        '/api': {
          target: 'http://linkon.natapp4.cc/api', // 接口的域名
          // secure: false,  // 如果是https接口,需要配置这个参数
          ws: true,
          changeOrigin: true,// 如果接口跨域,需要进行这个参数配置
          pathRewrite: {
            '^/api': ''
          }
        }
      }
    
    • main.js配置
    axios.defaults.baseURL = '/api'
    

开发中遇到的问题

关于移动端适配问题

关于移动端适配的问题,个人总的思路是利用vw+vh+rem
宽高使用vw,vh,%(vw、vh是基于视口的布局方案,故这个meta元素的视口必须声明)
字体和其他使用rem进行适配
rem适配采用amfe-flexible+px2rem

  • 在vue项目中使用 amfe-flexible

    • 安装
       npm intsall  amfe-flexible --save-dev  
      
      • 在main.js中进行配置
      import 'amfe-flexible'
      
      • 在根目录的index.html 的头部加入手机端适配的meta代码,这段代码可以禁止
      <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">
      
  • 在vue项目中引入px2rem

    • 安装
     npm install px2rem-loader --save-dev  //px转换为rem
    
    • 在utils.js中配置
    const px2remLoader = {
         loader: 'px2rem-loader',
         options: {
            remUnit: 75,
        }
     }
    const loaders = options.usePostCSS ? [cssLoader, postcssLoader, px2remLoader] : [cssLoader, px2remLoader]
    

微信相关的问题

微信js授权问题

  • 引入js-sdk
    npm install weixin-js-sdk --save-dev
    
  • 在需要的页面引用
    import wx from 'weixin-js-sdk'
    
  • 微信授权时如果采用ajax请求会造成跨域问题,所以在授权是请采用原生的跳转方式即
     window.location.href ='你的后台授权接口地址'+'回调地址'
    

修改微信浏览器title

  • 引入第三方库vue-wechat-title
      npm install vue-wechat-title --save-dev
    
    • main.js中配置
    import VueWechatTitle from 'vue-wechat-title'
    Vue.use(VueWechatTitle)
    
    • 在router中给每个路由添加meta
     {
       path: '/about',
       name: 'about',
       component: About,
       meta: {
        title: '关于我们'
       }
    }
    
    • vue页面中的使用
    <div v-wechat-title="$route.meta.title"></div>
    ///也可以动态设置
    <div v-wechat-title="$route.meta.title=title"></div>
    

iOS适配的问题

iOS下有个position:fixed失效的问题,以及因为该问题导致的页面滑动问题
还有iOS上取消弹簧效果问题(vue页面为例)

  • html.body采用position:fixed,宽高为100%
    html,
    body {
     position: fixed;
     top: 0;
     left: 0;
     right: 0;
     width: 100%;
     height: 100%;
     overflow-y: auto;
    }
    
  • 给Vue主页面入口添加以下样式
    • html
      <div id="app" class="container">
       <router-view  class="page"/>
      </div>
      
    • css
      .container {
        overflow-y: auto;
        height: 100%;
      }
      .page {
        position: absolute;
        left: 0;
        top: 0;
        right: 0;
        bottom: 0;
        height: 100%;
        overflow-y: auto;
       -webkit-overflow-scrolling: touch;
       z-index: 1;
       box-sizing: border-box;
      }
      ​ //-webkit-overflow-scrolling: touch;是为了让iOS滑动体验顺畅​​
      
  • vue页面的书写,以头尾固定,中间滚动的为例
    • html
    <div>
      <div class="navabar"></div> 
      <div class="scroll-cotainer"> 
        <div class="scroll-body"> </div>
      </div> 
      <div class="footer"></div>
    </div>
    
    • css
    .navabar {
      position: fixed;
      top: 0;
      left: 0;
      right: 0;
      height: 12vw;
     ​​ overflow: hidden;
     z-index: 500;
    } 
    .footer {
     position: fixed;
     left: 0;
     right: 0;
     bottom: 0;
     height: 12vw;
     z-index: 500;
    }
    ​.scroll-cotainer {
      position: absolute;
      top: 12vw;
      left: 0;
      right: 0;
      bottom: 12vw;
      height: auto;
    }
    .​scroll-body {
      width: 100%;
      height: 100%;
      overflow-y: auto;
    }
    

vue刷新当前页面不出现白屏问题

  • App.vue
    <template>
    <div id="app" class="container">
      <router-view  v-if="isRouterAlive" />
    </div>
    </template>
    <script>
    export default {
    name: 'App',
    provide () {
      return {
        reload: this.reload
      }
    },
    data () {
      return {
        isRouterAlive: true
      }
    },
    methods: {
      reload () {
        this.isRouterAlive = false
        this.$nextTick(function () {
          this.isRouterAlive = true
        })
      }
    }
    }
    </script>
    
  • 需要刷新的页面
    export default { inject: ['reload']}
    
    在需要刷新的地方调用this.reload()​​​

-webkit-line-clamp vue打包后不起作用

  • 安装插件

    npm i -S optimize-css-assets-webpack-plugin
    
  • 注释掉webpack.prod.conf.js中下面这段代码代码

       new OptimizeCSSPlugin({
        cssProcessorOptions: config.build.productionSourceMap
          ? { safe: true, map: { inline: false } }
          : { safe: true }
      })
    

移动端Video标签的使用

  • Android端禁止全屏:x5-playsinline=“true”

iconfont字体引用

  • 在https://www.iconfont.cn上下载代码
  • copy到vue的assets目录下
  • 在main.js中引入css文件
  • 在标签内引用样式即可

路由跳转不添加history

  • 原生
    window.loaction.replace()不添加history
    
  • vue
    this.router.replace()替换当前路由不添加history
    

介绍几个开发过程中好用组件

(备注)第一次写md文档,感觉极度舒适

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值