-------------------------------------- 最新更新 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 $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]参数列表 * <pre> * project_path - string 必填 需要上传的项目路径 * version - string 必填 版本号 * desc - string 选填 版本描述 * </pre> * @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" : [] }, "setting" : { "urlCheck" : true , "es6" : true , "postcss" : true , "minified" : true , "newFeature" : true },
"projectname" : "__PROJECTNAME__" } |
这个是哪里的报错,问题描述详细一些?
错误 TypeError: Cannot read
property 'runtimeAttr' of undefined
更新了提问内容,请再看看
遇到同样的问题,导致现在自己写的脚本无法打包,麻烦尽快解决一下,
然后,能否提供一个旧版的开发工具下载地址,直接升级了,没备份,现在无法用脚本打包,非常不方便
麻烦,尽快看下,打不了包了
一样的问题。。这个命令行工具很坑。。 建议官方多测试jenkins下,mac,win7,win10等环境的测试,以及多账户
大佬,出来看看吧