成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

TS項(xiàng)目中使用Protobuf的解決方案

hlcfan / 1524人閱讀

摘要:因?yàn)榉艞墝?duì)的維護(hù)而又一次火熱起來(lái)。流行的解決方案就是用。有中使用方式,實(shí)時(shí)解析方式解析方式靜態(tài)代碼方式事先導(dǎo)出的文件。早已有很多解決方案。好了,現(xiàn)在就可以在項(xiàng)目中使用的代碼了輸出

H5因?yàn)锳dobe放棄對(duì)Flash Player的維護(hù)而又一次火熱起來(lái)。
目前有l(wèi)aya和egret兩個(gè)H5游戲引擎,支持AS3、TS、JS三種語(yǔ)言開(kāi)發(fā)。
用H5開(kāi)發(fā)游戲,繞不開(kāi)與服務(wù)器的傳輸。流行的解決方案就是用protobuf。而JS也有protobuf。我的項(xiàng)目用的是Laya引擎的TS版本,可惜搜索整個(gè)網(wǎng)絡(luò)還沒(méi)找到TS版本的protobuf,只好用JS版本的了。

protobufjs有3中使用方式,實(shí)時(shí)解析方式、json解析方式、靜態(tài)代碼方式(事先導(dǎo)出proto的js文件)。
那么三種方式,可想而知,靜態(tài)代碼執(zhí)行速度最快,并且可以直接訪問(wèn)到proto中定義的字段,不需要用字符串來(lái)傳字段名字。這樣也可以保證對(duì)proto取值賦值時(shí)不會(huì)出現(xiàn)拼寫(xiě)錯(cuò)誤,也不需要記住字段的名字。

有個(gè)專(zhuān)門(mén)的工具鏈接可以把.proto文件導(dǎo)出.js文件以及對(duì)應(yīng)的.d.ts文件。
首先安裝Node.js
然后,安裝protobufjs:

npm install protobufjs

裝完以后,可以用命令導(dǎo)出.js文件和.d.ts文件

pbjs -t static-module -w commonjs -o joengProto.js joengProto.proto
pbts -o joengProto.d.ts joengProto.js

第一行導(dǎo)出js文件,第二行把導(dǎo)出的js生成對(duì)應(yīng)的.d.ts文件,這樣就可以在TS代碼中調(diào)用了。
-t -static-module參數(shù),表示選的是靜態(tài)代碼模式。
-w commonjs表示用什么標(biāo)準(zhǔn)來(lái)輸出js代碼,有各種比如es2015、es5、umd、amd什么的,然而我對(duì)js不太熟悉,總之只有commonjs可以執(zhí)行成功,其他都會(huì)報(bào)錯(cuò)什么的。

好了,導(dǎo)出成功了。但代碼卻執(zhí)行不了,要么什么反應(yīng)都沒(méi)有,要么報(bào)一些奇怪的錯(cuò):

unexpected token import

問(wèn)題是什么呢?找了很多資料,也不知道什么問(wèn)題,但沒(méi)頭沒(méi)腦地看了很多文章以后,也差不多想到大概是什么問(wèn)題了。

由于TS/JS項(xiàng)目會(huì)用到各種第三方JS類(lèi)庫(kù),而這些類(lèi)庫(kù)所用的標(biāo)準(zhǔn)各不相同,有的是ES5的有的是ES6的、commonJSd的,而你自己的項(xiàng)目可能是ES5的也可能是ES6的等等。而ES5是不支持import和export的,而es6呢,很多瀏覽器還不支持這個(gè)標(biāo)準(zhǔn)。
那么問(wèn)題來(lái)了,js三方庫(kù)最令人頭疼的就是各種庫(kù)標(biāo)準(zhǔn)不一致,想要共存于一個(gè)項(xiàng)目,怎么辦呢?順著這個(gè)思路想,應(yīng)該是把生成的js的代碼轉(zhuǎn)成兼容各種標(biāo)準(zhǔn)。

早已有很多解決方案。由于找到大神阮一峰的一個(gè)文章詳細(xì)介紹了怎么用babel,所以我選了babel。Babel 入門(mén)教程

按照上面鏈接的內(nèi)容,很快就可以把proto導(dǎo)出的代碼轉(zhuǎn)換標(biāo)準(zhǔn)了。然而依然不行,因?yàn)閎abel不會(huì)自動(dòng)轉(zhuǎn)換export和import,而我的代碼運(yùn)行不了主要就是這兩個(gè)關(guān)鍵字的問(wèn)題。繞了一圈等于白搞了。。。
好在只需要安裝一個(gè)插件就可以轉(zhuǎn)export和import了。
安裝babel

npm install babel

安裝插件

npm install --save-dev babel-plugin-add-module-exports

IDE中,在項(xiàng)目根目錄建一個(gè)文件 .babelrc
注意是你的項(xiàng)目的根目錄,不是babel的也不是node的。
內(nèi)容如下:

{
  "presets": [
    "es2015"
  ],
  "plugins": [
    "add-module-exports"
  ]
}

再次執(zhí)行命令

babel proto/joengProto.js -o proto/joengProto.js

查看生成的joengProto.js文件,已經(jīng)沒(méi)有import和export關(guān)鍵字了。
好了,現(xiàn)在就可以在TS項(xiàng)目中使用proto的JS代碼了

import awesome = require("../proto/joengProto");
class MyTest
{
    constructor()
    {
        console.log("---start---");
        var cls = awesome.awesomepackage.AwesomeMessage;

        let msg:awesome.awesomepackage.AwesomeMessage = cls.create();
        msg.awesomeField = "12345";
        msg.num = 20;

        console.log(msg.num);
    }
}
new MyTest();

輸出:

---start---
20

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/92421.html

相關(guān)文章

  • 基于 protobuf 協(xié)議實(shí)現(xiàn)高性能 IM 客戶端

    摘要:涉及到計(jì)算機(jī)基礎(chǔ)知識(shí),例如字節(jié)緩沖大小端等。是指用多少位表示的整數(shù),例如就是用位即一個(gè)字節(jié)表示的整數(shù),二進(jìn)制范圍是,對(duì)應(yīng)的十進(jìn)制就是。開(kāi)發(fā)時(shí)通訊雙方或者多方終端都遵循協(xié)議。 這里記錄了使用 protobuf 協(xié)議與服務(wù)端數(shù)據(jù)交互的相關(guān)內(nèi)容和知識(shí)。涉及到計(jì)算機(jī)基礎(chǔ)知識(shí),例如字節(jié)、buffer 緩沖、大小端等。 字節(jié) / Byte 1 字節(jié)代表了 8 位(bit)二進(jìn)制,1 位就是 0...

    ssshooter 評(píng)論0 收藏0
  • 基于http協(xié)議使用protobuf進(jìn)行前后端交互

    摘要:呵呵呵打印出來(lái)的是二進(jìn)制流需要進(jìn)行化然后給前端。不然的話瀏覽器會(huì)自動(dòng)解析成文字的前端需要進(jìn)行接受二進(jìn)制流先引入文件以及插件前端用請(qǐng)求的路由,在回調(diào)函數(shù)里的為后端的返回值。 protobuf介紹 由于網(wǎng)上關(guān)于protobuf的交互的資料比較零散,所以自己整理了一下關(guān)于protobuf前后端交互的資料,以作參考。 Google Protocol Buffers 簡(jiǎn)稱(chēng) Protobuf,它提...

    hersion 評(píng)論0 收藏0
  • C#使用protobuf-net進(jìn)行序列化

    摘要:通過(guò)類(lèi)庫(kù)提供的和分別執(zhí)行序列化和反序列化,而不用依賴(lài)任何生成的代碼。只針對(duì)平臺(tái)的話,不需要文件就可以應(yīng)用序列化協(xié)議。前一篇文章我們看到使用Google.Protobuf有諸多不便(參考《如何在C#中使用Google.Protobuf工具》),這次我們來(lái)看看另一個(gè)工具的使用體驗(yàn)。相關(guān)資料、鏈接:github項(xiàng)目:https://github.com/protobuf-net/protobuf-...

    不知名網(wǎng)友 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

hlcfan

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<