小程序开发—wepy

wepy

小程序最早的框架之一,是一款让小程序支持组件化开发的框架,通过预编译的手段让开发者可以选择自己喜欢的开发风格去开发小程序。

项目结构(主要)

  • dist:编译后的代码(可直接运行于微信开发者工具)
  • wepy.config.js:打包配置文件
  • jsconfig.json:js个性化配置
  • jest.config.js:单元测试配置
  • .gitignore:git配置文件
  • src:项目根目录
    • pages:页面
    • components:公共组件
    • mixins:全局混入
    • assets:静态资源
      • images:图片资源
      • iconfont:字体图标
      • styles:公共样式资源
    • wxs:wxml文件功能增强
    • utils:通用方法
    • config.js:项目配置文件

iconfont

由于小程序自身受大小限制,除了合理分包外,引入iconfont,以减少图标图片的引入。

wxs

wxml文件只可以处理一些简单逻辑,无法处理复杂逻辑,例如:数据格式化
时间戳转日期:1624338122299 => '2021/06/24'
优点:在不改变原有数据下,展示格式化后的数据。避免一字段,多变量问题
缺点:不支持ES6语法,某些写法有差别,请参照wxs语法

  const formatTime = function (timestamp) {
      return new Date(timestamp).toLocaleDateString()
  }
  module.exports = {
    formatTime: formatTime,
  };
    // 引入
    import tool from './comm.wxs'
    wxs = {
        tool : tool
    };
   const todos = [
      { name: 'work', time: 1624338122299 },
      { name: 'eat', time: 1624338122190},
      { name: 'sleep', time: 162433819999},
   ]
   <view wx:for="todos" wx:key="name">{{tools.formatTime(item.time)}}</view>

环境变量控制

通常我们拥有多套访问地址,如:开发(内网)环境、测试(外网)环境、生产环境。
现有:访问不同环境时,手动修改ENV变量

  const ENV = 'dev'
  const configMap = {
      dev: {
          removeImgUrl:'xxxx',
          baseUrl: 'xxxx'
      },
      uat: {
          removeImgUrl:'xxxx',
          baseUrl: 'xxxx'
      },
      prod: {
          removeImgUrl:'xxxx',
          baseUrl: 'xxxx'
      }
  }
  const config = configMap[ENV]
  module.exports = config;

优化:依赖package.json运行的script命令,从而构建指定环境变量下的dist文件

  • npm依赖
    • cross-env:设置环境变量,兼容mac/windows
    • babel-plugin-global-define:设置全局变量
// package.json
"script": {
      "dev": "wepy build --no-cache --watch -s  src -t dist",
      "set-env:dev": "cross-env NODE_ENV=dev && npm run dev",
      "set-env:uat": "cross-env NODE_ENV=uat && npm run dev",
 }
 // wepy.config.js
  const ENV = process.env.NODE_ENV || dev
  plugins: [
        [ 'global-define', {
             NODE_ENV: ENV
        }]
   ]
  // config.js
  const ENV = NODE_ENV || 'dev'

第三方组件(minui)

minui提供自己的组安装方式,直接将ui组件安装到dist目录下,而dist目录在git上传时,被忽略掉,所以多分支开发时,会出现依赖丢失。

优化方案:

  1. 修改.gitignore文件配置
  2. 新建packages文件夹,通过增加script命令,编译前copy文件夹
  // .gitignore文件    git上传时,忽略除dist/packages所有文件夹/文件
  dist/*
  !dist/packages
  "script": {
      "dev": "npm run copy-packages && wepy build --no-cache --watch -s  src -t dist",
      "copy-packages": "cp -rvf src/packages dist",
   }

wepy文件常见属性

  • data:数据
  • methods: 绑定在标签元素上的方法
  • events: 声明组件之间的事件处理函数,例如:自组件调用父组件:this.$emit('xxx',...args)
  • computed: 计算属性(用法同vue)
  • watch: 监听属性(用法同vue)
  • config: 页面配置
  • components: 组件注册(用法同vue)

常用生命周期@1.0|@2.0(按照调用执行顺序)

  • onLaunch:小程序初始化
  • onLoad:页面加载
  • onShow:页面显示
  • onReady:页面首次渲染完成
  • onHide:页面隐藏
  • onUnload:页面卸载

开发中遇到的一些问题

  • 自定义组件中引入minui组件,无法调用minui组件methods的方法

在自定义组件中,无法通过this.$wxpage.selectComponent() 获取组件实例

但是在页面中引入minui组件可以通过this.$wxpage.selectComponent() 获取到组件实例

  • 滚动穿透问题

通过设置page的overflow属性,来阻止滚动。弹层内有输入框,键盘弹起时,按住输入框滚动依然会滚动穿透

  const overflow = status ? 'hidden' : 'auto'
  wx.setPageStyle({
      style: {
          overflow: overflow
      },
      fail(e) {
          console.log(e)
      }
  })
  • 同一页面,组件多次复用,导致props共享问题

在注册时,同一组件定义多个组件名

  import Button from './button'
  components = {
       ComA: Button,
       ComB: Button
  };
  • 自定义组件循环

使用repeat标签进行包裹

   <repeat for="{{list}}" key="index" index="index" item="item">
        <Child :item="item"></Child>
   </repeat>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容