Google Flatbuffers在(AMD?)模块中为每个所需的表创建一个。我将它们全部放在一个名为PNTCI的名称空间中。
现在,通过对PNTCI命名空间进行连续的包含,我正在做一些丑陋的操作,将名称空间合并在一起:
const telem = require('../messages/Telemetry_generated').PNTCI
const PNTCI = Object.assign(telem, require('../messages/header_generated').PNTCI)
再次的原因是,自动生成的require模块具有一种过时的格式,对于Header_genic.js来说,如下所示:
// automatically generated by the FlatBuffers compiler, do not modify
/**
* @const
* @namespace
*/
var PNTCI = PNTCI || {};
/**
* Common header for all PNTCI message payloads
*
* @constructor
*/
文件的结尾看起来像这样:
/**
* @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;
以及Telemetry_genic.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;
,然后文件结尾看起来像这样:
PNTCI.Telemetry.finishTelemetryBuffer = function(builder, offset) {
builder.finish(offset);
};
// Exports for Node.js and RequireJS
this.PNTCI = PNTCI;
答案 0 :(得分:1)
Node.js并不习惯使用名称空间,因为模块本身充当名称空间,因此问题仅针对这些特定模块。
可以使用对象传播语法将其写得更短:
const PNTCI = {
...require('../messages/Telemetry_generated').PNTCI,
...require('../messages/header_generated').PNTCI
};
哪种语法糖适用于:
const PNTCI = Object.assign({},
require('../messages/Telemetry_generated').PNTCI,
require('../messages/header_generated').PNTCI
);
如果这些模块经常一起使用,则将它们重新导出为单个模块可能会有所帮助:
module.exports = {
...require('../messages/Telemetry_generated').PNTCI,
...require('../messages/header_generated').PNTCI
};
由于通常在Node中不需要名称空间,因此可能不需要在单个PNTCI
变量下合并模块;模块可以分别导入到不同的变量中。如果仅在某些地方使用这些模块中的某些模块,则使应用程序更具模块化。