小程序自动判断/切换开发环境、正式环境的方案
前段时间我也碰到了这个问题:
https://developers.weixin.qq.com/community/develop/doc/0004cc6fe543405bb0882c1b156800
开发环境和正式环境的接口地址是不一样的,同样的代码,不用修改任何代码,就能自动访问对应的接口地址。
示例代码:
[代码]let host = '';
let NODE_ENV = 'pro';
if( NODE_ENV === 'pro' ){
host = 'https://pro.qq.com';
}else{
host = 'https://dev.qq.com';
}
[代码]
一般情况下大家都会这么写,那么NODE_ENV只能手动修改,官方没有给出当前的环境变量,我们只能自己想办法了。
我的灵感来自于“构建npm”功能,当安装了插件并构建npm之后,点上传代码,“node_modules”文件夹是不会上传的。
后来我搜索了文档,project.config.json配置项中的packOptions.ignore字段,用以配置打包时对符合指定规则的文件或文件夹进行忽略,以跳过打包的过程,这些文件或文件夹将不会出现在预览或上传的结果内。
好了,方案来了,我们可以在根目录新建一个文件,local.txt,然后配置它打包时不上传。那么我们可以添加如下代码:
[代码]const fileManager = wx.getFileSystemManager();
try{
fileManager.accessSync('/local.txt');
NODE_ENV = 'dev';
}catch(e){}
[代码]
这样就可以了,因为线上包中没有local.txt这个文件,那么NODE_ENV=‘pro’,本地有这个文件,NODE_ENV=‘dev’。
完整代码:
[代码]let host = '';
let NODE_ENV = 'pro';
const fileManager = wx.getFileSystemManager();
try{
fileManager.accessSync('/local.txt');
NODE_ENV = 'dev';
}catch(e){}
if( NODE_ENV === 'pro' ){
host = 'https://pro.qq.com';
}else{
host = 'https://dev.qq.com';
}
[代码]
over
PS: 还有的同学需要区分PC和手机,这个也比较简单,使用:wx.getSystemInfoSync();获取系统信息,如果是PC端的开发者工具,则platform = “devtools”