问题模块 框架类型 问题类型 操作系统 工具版本
开发者工具 微信小程序 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]输出结果,如果成功,则返回
*
* port - int .ide端口号
*
* @return boolean
*/
public function openWxideCli(array $aInput, array &$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]参数列表
*
* project_path - string 必填 需要上传的项目路径
* version - string 必填 版本号
* desc - string 选填 版本描述
*
* @param array $aOutput [out]输出结果
* @return boolean
*/
public function wxideCliUpload(array $aInput, array &$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": []