评论

小程序自动判断/切换开发环境、正式环境的方案

开发环境和正式环境的接口地址是不一样的,同样的代码,不用修改任何代码,就能自动访问对应的接口地址。

前段时间我也碰到了这个问题:
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”

最后一次编辑于  12-02  
点赞 3
收藏
评论

2 个评论

  • 小程序技术专员-villainhr
    小程序技术专员-villainhr
    12-02

    代码排版,用下面的包裹一下,会好看些。

    ```

    let index = "测试"

    ```

    12-02
    赞同 2
    回复 1
    • 八霄虎࿐          ⁶⁶⁶
      八霄虎࿐ ⁶⁶⁶
      12-02
      谢谢,加上了
      12-02
      1
      回复
  • muse
    muse
    12-05

    上传和预览没没办法判断了吧

    12-05
    赞同
    回复 1
    • 八霄虎࿐          ⁶⁶⁶
      八霄虎࿐ ⁶⁶⁶
      12-05
      官方不给解决方案,我们自己只能做到这些,不知道其他人有没有补充方案
      12-05
      回复