使用带有QML的Node JS库

我想要一个为Node.jsdevise和打包的JS库,并将其与QML(特别是ProtoBuf库 )结合使用。 ProtoBuf库依赖于ByteBuffer库 。

我编辑了bytebuffer.jsprotobuf.js来添加.pragma library作为第一行。 然后,在我的.qml我有:

 import "qrc:/scripts/bytebuffer.js" as BB import "qrc:/scripts/protobuf.js" as PB Window { Component.onCompleted: { console.log('PB', PB); console.log('func',PB.loadProtoFile); for (var k in PB) console.log(k,typeof PB[k],PB[k]); console.log('done!') } } 

我看到的输出是:

 qml: PB [object Object] qml: func undefined qml: done! 

所以,QML在某种意义上加载了ProtoBuf库(我已经把debugging信息放在那个库中,并且确认了通用加载器正在运行并且能够findByteBuffer ),但是它不是我期望的方法的对象,比如loadProtoFile()

我如何得到库暴露的真实ProtoBuf对象? 或者我应该如何修改库以正确使用QML?

我现在明白了QML命名空间库的方式,声明

 import "qrc:/scripts/protobuf.js" as PB 

导致PB成为库脚本运行的全局范围。 因此,图书馆在这个代码中暴露的“真实的”ProtoBuf:

 (global["dcodeIO"] = global["dcodeIO"] || {})["ProtoBuf"] = factory(global["dcodeIO"]["ByteBuffer"]); 

可以在QML中find:

 var ProtoBuf = PB.dcodeIO.ProtoBuf; console.log( ProtoBuf.loadProtoFile ); //-> function() { [code] }