wepy1.x升级为wepy2.x的血泪史

1,189 阅读2分钟

       项目介绍:原始遗留项目,用的wepy1.6.0,运营想加友盟统计,结果发现友盟并不友好,仅支持wepy2.0以上版本,无奈只得升级框架,用了将近一周的时间才升级完,感觉2是vue和小程序原生的结合体,跟1已经没有太大关系,想升级的老铁做好心理准备;

 1、首先需要全局安装wepy脚手架,1.x和2.x的脚手架不一样;

npm install @wepy/cli -g # 全局安装 WePY CLI 工具

建议先自己初始化一个wepy2的项目模板,然后对照更改;

wepy init standard myproj # 使用 standard 模板初始化项目

2、首先按照新建的wepy2模板将package.json和wepy.config.js中奖基础依赖包更新;

主要注意wepy.config.js中的babel需要更改;

1.x配置:

compilers: {		
    less: {
	compress: prod
    },		
    babel: {			
                sourceMap: true,			
                presets: [ "env" ],			
                plugins: [
                            "transform-class-properties",
			    "transform-decorators-legacy",
				"transform-object-rest-spread",
				"transform-export-extensions"
			]
		}
	},

2.x配置:

compilers: {    less: {      compress: prod,    },    babel: {      sourceMap: true,      presets: ['@babel/preset-env'],      plugins: ['@wepy/babel-plugin-import-regenerator'],    },  },

3、注意打包后生成的文件夹,1.x是dist,2.x是weapp。需要更改project.config.json中的

"miniprogramRoot": "weapp/",

4、需要更改静态资源文件目录,我们原来的是assets,需要在wepy.config.js将该目录配置上;

static: ['src/assets'],

5、开始更改.wpy文件,首先wepy引入方式改为:

import wepy from '@wepy/core';

其次写法简化:export default class extends 不再需要,直接用wepy.app({})即可;

最后,config的配置,需要放到script标签外边,用config标签包裹;

<config>  {    pages: [      'pages/home/home',      'pages/web-view/web-view',      'pages/login-register/login'    ],    window: {      backgroundColor: '#f4f4f4',      backgroundTextStyle: 'dark',      navigationBarBackgroundColor: '#fff',    },    tabBar: {      color: '#888888',      selectedColor: '#FE681C',      backgroundColor: '#ffffff',      borderStyle: 'black',      list: [        {          selectedIconPath: './assets/icon/toolbar_class_per.png',          iconPath: './assets/icon/toolbar_class_nor.png',          pagePath: 'pages/home/home',          text: '首页',        }      ],    },    usingComponents: {      'van-popup': './vant/popup/index',      'van-tab': './vant/tab/index',    },    networkTimeout: {      request: 15000,    },    plugins: {      captcha: {        version: '1.1.0',        provider: '12345678',      },    },  }</config>

注意:wepy2已经默认支持async,不用再单独引入wepy-async-function插件;

6、页面和组件中也不在需要export default class extends  直接用wepy.page({})和wepy.component({})包裹就行;需要注意的是组件引用方式不能再用import的方式;

改为在config中usingComponents引入

<config>  {    navigationBarTitleText: '积分商城',    enablePullDownRefresh: true,    onReachBottomDistance: 50,    usingComponents: {      loadMore: "~@/base/load-more/load-more",      defaultPage: "~@/base/DefaultPage/default"    }  }</config>

7、页面中自定义的函数,需要全部放到methods中,不能再出现函数和生命周期函数同级的情况,否则在调用的时候会报错,找不到该函数;

8、页面中wx:for改为v-for(同vue),而且函数传参方式也需要更改:

<block v-for="(item,index) in productList" :key="index">        <view class="product" @tap="goDetails(item.goodsId)">

wx:if和v-if兼容,如果用v-if,变量的{{}}需要去掉;

 {{score}}

9、全局变量的获取改为:this.$app.$options.globalData

10、input等数据绑定中数据获取方式改为:

onInput(e) {      const value = e.$wx.detail.value;    },

11、不用再手动更新数据变化,详见官方文档说明:

12、组件生命周期改为了原生小程序一样,详见小程序文档:小程序组件详情

13、父传子:原来的$broadcast取消了,目前只能用$wx.selectComponent('#id').方法名(data)来调用子组件方法;

子传父还用原来的this.$emit('tap');

**注意:**更改中发现$wx.selectComponent   调用子组件中的方法后,子组件的data定义的数据会变成underfind;

// 父组件通过$wx.selectComponent('#calendar')触发该函数时,this.calendar为underfind;        // 原因未知,通过将this.calendar存储到缓存来解决该问题        this.calendar = wx.getStorageSync('calendar');

14、原来wepy的跳转页面也都改为原生的wx跳转了;

wx.navigateTo({          url:            '/pages/live/live?courseId=' +            data.courseId +            '&classLessonId=' +            data.classLessonId        });