[LayaAir 2.0]Laya2.0导入protobufjs第三方库,报错找不到文件
Laya2.0
在Main.ts里:
用了第三方库protobufjs。
protoAll.d.ts是proto打包出来的proto类文件,在vscode中TS项目测试过可以正常使用。
我已经生成出js和.d.ts代码了,在vscode里可以正常运行。laya里代码不会报错,编译项目时会报错。
而在Laya项目里,protoAll.d.ts放在libs下,protoAll.js放在bin/libs下,使用代码不会报错。编译项目时,按F5编译报错。把base.d.ts的引入改成相对路劲,就报其他的路径找不到。
出错了:
TypeScript error: node_modules/@types/node/index.d.ts(50,22): Error TS6053: File 'node_modules/@types/node/base.d.ts' not found.
现在把protobufjs放到Laya IDE的安装目录下的node_modules下面。可以编译通过了。
但又有新的问题,代码提示找不到proto对象的属性了。
原因我发现是.js文件的相对路径和.d.ts的相对路径不一致,导致编译能通过则找不到代码提示,能够提示就编译不通过。
因为我导入的import的路径,只能写一个,要么是js的路径,要么是.d.ts的路径。
嗯,我把这两个文件都放libs下就好了。
现在又有新的问题了,
用babel打包的js文件,项目编译会报错
SyntaxError: 'import' and 'export' may appear only with 'sourceType: module'
而用webpack打包的话,编译不报错,运行时会报错:
TypeError: Cannot read property 'bee' of undefined
在Main.ts里:
import protoAll = require("../libs/protoAll");
var pCls = protoAll.com.bee.protobuf.ClimbingTowerInfoProto;
var p: protoAll.com.bee.protobuf.ClimbingTowerInfoProto = pCls.create();
p.curId = 10;
p.isSecondPass = true;
用了第三方库protobufjs。
protoAll.d.ts是proto打包出来的proto类文件,在vscode中TS项目测试过可以正常使用。
我已经生成出js和.d.ts代码了,在vscode里可以正常运行。laya里代码不会报错,编译项目时会报错。
而在Laya项目里,protoAll.d.ts放在libs下,protoAll.js放在bin/libs下,使用代码不会报错。编译项目时,按F5编译报错。把base.d.ts的引入改成相对路劲,就报其他的路径找不到。
出错了:
TypeScript error: node_modules/@types/node/index.d.ts(50,22): Error TS6053: File 'node_modules/@types/node/base.d.ts' not found.
现在把protobufjs放到Laya IDE的安装目录下的node_modules下面。可以编译通过了。
但又有新的问题,代码提示找不到proto对象的属性了。
原因我发现是.js文件的相对路径和.d.ts的相对路径不一致,导致编译能通过则找不到代码提示,能够提示就编译不通过。
因为我导入的import的路径,只能写一个,要么是js的路径,要么是.d.ts的路径。
嗯,我把这两个文件都放libs下就好了。
现在又有新的问题了,
用babel打包的js文件,项目编译会报错
SyntaxError: 'import' and 'export' may appear only with 'sourceType: module'
而用webpack打包的话,编译不报错,运行时会报错:
TypeError: Cannot read property 'bee' of undefined
没有找到相关结果
已邀请:
要回复问题请先登录
2 个回复
nevercai
赞同来自:
protoAll为什么要放libs里面呢。
放src里面就好了吧。
只有proto的lib才放libs里面
看了下你的bin/libs。里面并没有protobuf.js文件
*/
在Main.ts里面不需要require
你可以写 import protoAll = com.bee.protobuf
重要的是,你在index.js里面要require那个lib
可以手写,也可以在UI编辑模式里面按F9勾选。
不知道你的protoAll.js里面包不包括protobuf的runtime,如果不包括,可能要另外弄个protobuf.js放libs下面。
同上,需要在index.js里面require,并且比protoAll.js要先。
建议这个protoAll.js不要放libs目录,毕竟作为协议会经常修改。可以直接放js目录下面。
在require("js/bundle.js")前面加上require("js/protoAll.js")即可。
zengjoeng
赞同来自: