Google Flatbuffers 在(AMD?)模块中为每个需要的表创建。我将它们全部放在一个名为 PNTCI 的命名空间中。
现在,我正在做一些丑陋且不直观的事情,通过对 PNTCI 命名空间进行连续包含,将命名空间合并在一起,如下所示:
const telem = require('../messages/Telemetry_generated').PNTCI
const PNTCI = Object.assign(telem, require('../messages/header_generated').PNTCI)
Run Code Online (Sandbox Code Playgroud)
另一个原因是自动生成的 require 模块具有老式格式,对于 Header_ generated.js 如下所示:
// automatically generated by the FlatBuffers compiler, do not modify
/**
* @const
* @namespace
*/
var PNTCI = PNTCI || {};
/**
* Common header for all PNTCI message payloads
*
* @constructor
*/
Run Code Online (Sandbox Code Playgroud)
文件末尾如下所示:
/**
* @param {flatbuffers.Builder} builder
* @param {flatbuffers.Offset} offset
*/
PNTCI.Header.finishHeaderBuffer = function(builder, offset) {
builder.finish(offset);
};
// Exports for Node.js and RequireJS
this.PNTCI = PNTCI;
Run Code Online (Sandbox Code Playgroud)
对于 Telemetry_ generated.js
// automatically generated by the FlatBuffers compiler, do not modify
/**
* @const
* @namespace
*/
var PNTCI = PNTCI || {};
/**
* @constructor
*/
PNTCI.PosVector = function() {
/**
* @type {flatbuffers.ByteBuffer}
*/
this.bb = null;
Run Code Online (Sandbox Code Playgroud)
然后文件的末尾看起来像这样:
PNTCI.Telemetry.finishTelemetryBuffer = function(builder, offset) {
builder.finish(offset);
};
// Exports for Node.js and RequireJS
this.PNTCI = PNTCI;
Run Code Online (Sandbox Code Playgroud)
命名空间的使用对于 Node.js 来说并不惯用,因为模块本身充当命名空间,因此问题特定于这些特定模块。
可以使用对象扩展语法将其写得更短:
const PNTCI = {
...require('../messages/Telemetry_generated').PNTCI,
...require('../messages/header_generated').PNTCI
};
Run Code Online (Sandbox Code Playgroud)
这是语法糖:
const PNTCI = Object.assign({},
require('../messages/Telemetry_generated').PNTCI,
require('../messages/header_generated').PNTCI
);
Run Code Online (Sandbox Code Playgroud)
如果这些模块经常一起使用,将它们作为单个模块重新导出可能会有所帮助:
module.exports = {
...require('../messages/Telemetry_generated').PNTCI,
...require('../messages/header_generated').PNTCI
};
Run Code Online (Sandbox Code Playgroud)
由于 Node 中一般不需要命名空间,因此PNTCI可能不需要合并单个变量下的模块;模块可以分别导入到不同的变量中。如果在某些地方仅使用其中一些模块,这将使应用程序更加模块化。
| 归档时间: |
|
| 查看次数: |
1653 次 |
| 最近记录: |