收藏
回答

开发者工具v1.02.1810250上传接口报错

框架类型 问题类型 操作系统 工具版本
小程序 Bug Windows 1.02.1810250

-------------------------------------- 最新更新 11.01号 --------------------------------


问题已自行解决:在上传代码前,打开一次将要上传的项目。

    //打开指定目录的项目
    $strIDEPath = $this->_strWxidePath;
    $strDriverPath = substr($strIDEPath, 0, 2);
    exec("$strDriverPath && cd $strIDEPath && cli -o $strProjectPath 2>&1");

存在的问题:打开项目的过程中还是会报 runtimeAttr 的错误,虽然并不会影响之后上传流程。

StatusCodeError: 400 - "{\"code\":40000,\"error\":\"错误 {\\\"code\\\":40000,\\\"error\\\":\\\"错误 TypeError: Cannot read property 'runtimeAttr' of undefined\\\"}\"}"



-------------------------------------- 以下是历史问题 ----------------------------------


更新了最新版的微信开发者工具后,调用HTTP接口上传代码,爆出的错误:

{"code":40000,"error":"错误 {\"code\":40000,\"error\":\"错误 TypeError: Cannot read

property 'runtimeAttr' of undefined\"}"}


代码调用流程(PHP命令行模式,workerman框架):

1、onWorkerStart,进程初始化时(之后不再执行),命令行调用打开工具

    /**
     * php命令行调取微信开发者工具
     * @param array $aInput [in]参数列表,暂无,填空数组即可
     * @param array $aOutput [out]输出结果,如果成功,则返回
     * <pre>
     * port - int .ide端口号
     * </pre>
     * @return boolean
     */
    public function openWxideCli(array $aInputarray &$aOutput = [])
    {
        $strIDEPath $this->_strWxidePath;
        $strDriverPath substr($strIDEPath, 0, 2);
        $nOpenRet = 1;
        $aOpenOut = [];
        exec("$strDriverPath && cd $strIDEPath && cli.bat 2>&1"$aOpenOut$nOpenRet);
        if ($nOpenRet)
        {
            $this->setError('开启微信开发者工具命令行失败!');
            return false;
        }
 
        //匹配出端口号
        $strPattern '/http:\/\/127\.0\.0\.1:([\d]+)/';
 
        foreach ($aOpenOut as $line)
        {
            $aMatch = [];
            if (preg_match($strPattern$line$aMatch))
            {
                $aOutput['port'] = intval($aMatch[1]);
                break;
            }
        }
        return true;
    }



2、onMessage监听我们平台的上传代码请求,然后调用工具的HTTP上传接口,就是在这里返回的错误

    /**
     * php命令行调取微信开发者工具HTTP上传接口
     * @param array $aInput [in]参数列表
     * <pre>
     * project_path - string 必填 需要上传的项目路径
     * version - string 必填 版本号
     * desc - string 选填 版本描述
     * </pre>
     * @param array $aOutput [out]输出结果
     * @return boolean
     */
    public function wxideCliUpload(array $aInputarray &$aOutput = [])
    {
        if (!$this->_checkFields($aInput, ['project_path''version''desc'], [], true))
        {
            return false;
        }
 
        $strProjectPath $aInput['project_path'];
        $strVersionNum $aInput['version'];
        $strDesc $aInput['desc'];
        $nPort $aInput['wxide_port'];
         
        //echo $nPort."\n";
         
        if(!$nPort)
        {
            $aOpenResult = [];
            if (!$this->openWxideCli([], $aOpenResult))
            {
                return false;
            }
            $nPort $aOpenResult['port'];
        }
 
        //http上传代码
        $_oCurlService new CurlService();
        $url 'http://127.0.0.1:' $nPort '/upload?projectpath=' . urlencode($strProjectPath)
        '&version=' $strVersionNum;
 
        if (!empty($strDesc))
        {
            $url .= '&desc=' . urlencode($strDesc);
        }
 
        $result '';
        $bResponse $_oCurlService->get($url$result);
 
        if (!$bResponse)
        {
            echo date('Y-m-d H:i:s') . PHP_EOL;
            echo $strProjectPath . PHP_EOL;
            echo $result . PHP_EOL;
            echo $nPort.PHP_EOL;
            $aResponse = json_decode($result, true);
            $this->setError($aResponse['code']);
            return false;
        }
 
        return true;
    }

命令行输出错误信息:



3、项目配置文件模板

project.config.json

{
    "description": "项目配置文件。",
    "packOptions": {
        "ignore": []
    },
    "setting": {
        "urlCheck": true,
        "es6": true,
        "postcss": true,
        "minified": true,
        "newFeature": true
    },

    "compileType": "miniprogram",

   //上传时会替换为具体的appid

    "appid": "__DEVELOPERAPPID__",

   //上传时会替换为具体的名称

    "projectname":"__PROJECTNAME__"
}


最后一次编辑于  2018-11-01
回答关注问题邀请回答
收藏

3 个回答

  • Special
    Special
    2018-10-30

    这个是哪里的报错,问题描述详细一些?

    错误 TypeError: Cannot read

    property 'runtimeAttr' of undefined


    2018-10-30
    有用
    回复 3
    • 大吉大利
      大吉大利
      2018-11-01

      更新了提问内容,请再看看

      2018-11-01
      回复
    • 2018-11-08

      遇到同样的问题,导致现在自己写的脚本无法打包,麻烦尽快解决一下,

      然后,能否提供一个旧版的开发工具下载地址,直接升级了,没备份,现在无法用脚本打包,非常不方便

      2018-11-08
      回复
    • 一天到晚游泳的鱼
      一天到晚游泳的鱼
      2018-11-14

      麻烦,尽快看下,打不了包了

      2018-11-14
      回复
  • 杨啸
    杨啸
    2018-11-13

    一样的问题。。这个命令行工具很坑。。 建议官方多测试jenkins下,mac,win7,win10等环境的测试,以及多账户

    2018-11-13
    有用
    回复
  • 大吉大利
    大吉大利
    2018-10-30

    大佬,出来看看吧

    2018-10-30
    有用
    回复
登录 后发表内容