h5项目选用taro框架感觉不太好,很多API是在小程序环境 得到支持的,在h5端的支持度都没有写明可不可以用,比如
1 2 3 npm install -g @tarojs/cli taro init myApp npm run dev:h5 
可能会出现的问题,network_error 服务器错误,记得把fan qiang软件的全局模式切掉。这个问题貌似只在初次dev的时候出现过,之后开全局也能正常dev,之后好好学计网吧,现在我也不太懂.npm run dev:h5后可以看到:
况且taro中封装了太多东西,一方面可以提高生产效率,但另外一方面也降低了对技术的要求,比如了解web API的使用,比如规范化css类名,比如构建页面路由,比如http request。
当你在本地改了代码甚至不需要手动刷新浏览器,就可以看到更改,这依赖于wepack HMR 功能。
当你ctrl + c退出后,可以看到如上,使用 HMR 的过程中,(有人说)通过 Chrome 开发者工具知道浏览器是通过websocket 和webpack-dev-server  进行通信的,感觉webpack-dev-server是一个很值得研究的东西。
定位+位置比对 使用navigator.geolocation.getCurrentPosition web API 获取经纬度,不同浏览器可能使用的地理信息服务,通过调试可知,qq浏览器使用的是google服务。然而google位置获取服务 已经不再支持http了……
项目需求的情景是给用户推荐附近食堂菜单,所以必然要涉及到距离测算。这里我使用腾讯位置服务 其中有两个比较难搞的点。
MD5加密 在进行配置的时候,可以看到如下,如果使用的是签名校验验证方法,则会涉及md5加密算法。
md5并不是js内置的方法,所以要外部引入,引入可以用npm install相关包,也可以直接copy 源代码。js版本的md5 在github上也挺好找的。做适量更改。
1 2 3 4 5 export  default  md5import  md5 from  './md5.min.js' ;let  sig = md5('/ws/distance/v1/?from=28.983171,116.308479&key=BQBBZ-TRBCW-J3WRO-OUTER-XXXXXX&mode=driving&to=28.996060,116.353455;28.949227,116.3943108kjYTMrC9zaOW9xTLS5N3EnB7HWviv' );
 
建议在md5.min.jsrun得到sig后在postman测试一下。排除一下配置错误,当然你之后就会发现会在浏览器中碰到postman中不会有的跨域问题,嘿嘿嘿😁……
如error所示,No ‘Access-Control-Allow-Origin’ header is present on the requested resource.在项目中使用 request 调用腾讯接口,会得到类似的错误,然而这是第三方服务,所以无法做到让服务器在响应首部中添加该字段。注意到该接口接受到JSONP 回调。
使用script标签调用接口后会返回一段js代码。在下面的情景中,则是接口的 responce 会成为globalFun的参数,返回 globalFun(res) 这个函数,实际上就将这个函数执行了。记得要将回调函数 globalFun 定义在全局可访问的位置。不然只定义在调用接口的页面,你会发现 undefined 的报错。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <script>     function  globalFun (obj ) {       console .log("globalfun" );       console .log(obj);       console .log(obj.result.elements);       let  res = JSON .stringify(obj);       window .localStorage.setItem('resJson' , res);     } </script>  / / components/ page/shake/index.jsxuseWebService(pos){     console .log('useWebService' );     let  sig = md5('/ws/distance/v1/?'          +'callback=globalFun'          +'&from=' +pos.coords.latitude+',' +pos.coords.longitude         +'&key=BQBBZ-TRBCW-J3WRO-OUTER-------' +'&mode=walking'          +'&output=jsonp'          +'&to=28.086060,115.053455;28.069227,116.044310'          +'8kjYTMrC9zaOW9xTLS5N------' )     const  script = document .createElement("script" );     script.src = 'https://apis.map.qq.com/ws/distance/v1/?'      +'callback=globalFun'      +'&from=' +pos.coords.latitude+',' +pos.coords.longitude     +'&key=BQBBZ-TRBCW-J3WRO-OUTER------' +'&mode=walking'      +'&output=jsonp'      +'&to=28.086060,115.053455;28.069227,116.044310'      +'&sig=' +sig;     script.async = false ;     document .body.appendChild(script); } 
 
摇动监测 
部分代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 export  default  Shake;componentDidMount() {     const  system = Taro.getStorageSync('system' );     if (system == "iOS" ){        if (typeof (DeviceMotionEvent) !== 'undefined'  &&typeof  DeviceMotionEvent.requestPermission === "function" ){         DeviceMotionEvent.requestPermission()         .then(response  =>  {           alert("Orientation tracking "  + response);           if  (response == "granted" ) {                                                                 var  myShakeEvent = new  Shake();             myShakeEvent.start();             window .addEventListener('shake' , this .shakeEventDidOccur, false );           }else {             alert('您已拒绝请求,将无法获得摇一摇响应,可重新载入页面,允许请求~' )           }         })         .catch(console .error);        }     }else {       var  myShakeEvent = new  Shake();       myShakeEvent.start();       window .addEventListener('shake' , this .shakeEventDidOccur, false );     } } 
 
项目调试 本地跑项目,直接在浏览器中使用开发者工具即可。若想要真机调试,推荐使用Chrome远程调试 。
如果需要对devServer环境进行配置,参照webpack devServer 配置,可按如下: 配置了本地可信任ssl证书,可其实对我想获得https信赖来调试定位起不到作用,因为本地信任,而做不到公网信任啊……所以只能用github pages 生成预览页面,抽出来测试需要https的部分。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 var  fs = require ('fs' );h5: {     devServer:{       https:{         key: fs.readFileSync('/Users/mac/Desktop/example-cert/server.key' ),         cert: fs.readFileSync('/Users/mac/Desktop/example-cert/server.crt' ),         ca: fs.readFileSync('/Users/mac/Desktop/example-cert/rootCA.pem' ),       }            host: "localhost" ,       port:10086 ,       proxy:{         '/api' :{           target:'http://food.test.muxixyz.com/' ,           changeOrigin:'true'          }       }     }, } 
 
ECS+Nginx部署 部署步骤待更新,先说一个避坑地方:nginx 更新部署失败(视觉上的失败……)