我开发小程序用的wepy,别问好不好,或者其他的更好为啥不用,https://tencent.github.io/wepy/ tencent几个词解释了。
1.环境变量
小程序没有环境变量,而node的process.env.NODE_ENV又传不过去,如果要做到打包的时候替换一些信息,比如线上线下api接口不一致的时候,需要用到如下解决方法。
//安装
cnpm install babel-plugin-global-define --save
然后更改wepy.config.js
compilers:{
...
plugins: [
['global-define', {
__isProd: prod
}]
]
}
然后在其他文件里面就可以直接使用__isProd来判断环境,prod如果未定义可以加上:let prod = process.env.NODE_ENV === 'production';
以防小白不清楚,顺便贴下我的package.json的scripts:
"scripts": {
"dev": "wepy build --watch",
"dev2": "cross-env NODE_ENV=production wepy build --watch",
"build": "cross-env NODE_ENV=production wepy build --no-cache",
"test": "echo \"Error: no test specified\" && exit 1"
}
2.混合mixin
在每个页面,最好都引入一个自定义base 混合,处理全局事件和定义一些全局方法。
3. 小程序2018年10月10日后更改了用户授权机制
以前可以直接在onshow里面弹出授权窗口,现在微信更改了,需要在button的open-type和回调里面处理授权。 意思是需要用户手动点击这个按钮后才会有授权。
但是公司又要求小程序进来需要授权昵称和名称,要不然统计只有个openid,领券或者个人中心授权手机号。
曲线救国的方案。在上面的全局minxn里面,onShow方法检测是否授权,检测需要用个存储保存授权状态,因为wx.getSetting里面的scope好像不太全,后面微信也会把这个接口关掉,所以自己记录最好。 然后未授权的弹出wx.showModal,点击确定后跳转到新的页面,一个自定义授权页面,上面就放授权按钮。虽然绕了一圈,但是也实现了曲线救国。 如果只有一个页面需要授权,就在当前页面做个模拟的弹窗就行。全局的就悲剧,得跳转,要不然代码加的想吐