合并两个或多个node.js需要将模块合并到一个命名空间中
Google Flatbuffers为您想要的每个表创建in(AMD?)模块。我把它们都放在一个名为PNTCI的名字空间中 现在,我正在做一些丑陋和不直观的事情,通过对PNTCI名称空间进行连续包含,将名称空间合并在一起,如下所示:合并两个或多个node.js需要将模块合并到一个命名空间中,node.js,Node.js,Google Flatbuffers为您想要的每个表创建in(AMD?)模块。我把它们都放在一个名为PNTCI的名字空间中 现在,我正在做一些丑陋和不直观的事情,通过对PNTCI名称空间进行连续包含,将名称空间合并在一起,如下所示: const telem = require('../messages/Telemetry_generated').PNTCI const PNTCI = Object.assign(telem, require('../messages/header_generat
const telem = require('../messages/Telemetry_generated').PNTCI
const PNTCI = Object.assign(telem, require('../messages/header_generated').PNTCI)
/**
* @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;
PNTCI.Telemetry.finishTelemetryBuffer = function(builder, offset) {
builder.finish(offset);
};
// Exports for Node.js and RequireJS
this.PNTCI = PNTCI;
同样,原因是自动生成的require模块采用了一种老式的格式,对于标题_generated.js,该格式如下所示:
// automatically generated by the FlatBuffers compiler, do not modify
/**
* @const
* @namespace
*/
var PNTCI = PNTCI || {};
/**
* Common header for all PNTCI message payloads
*
* @constructor
*/
文件的结尾如下所示:
const telem = require('../messages/Telemetry_generated').PNTCI
const PNTCI = Object.assign(telem, require('../messages/header_generated').PNTCI)
/**
* @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;
PNTCI.Telemetry.finishTelemetryBuffer = function(builder, offset) {
builder.finish(offset);
};
// Exports for Node.js and RequireJS
this.PNTCI = PNTCI;
用于遥测(u 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;
然后文件的结尾如下所示:
const telem = require('../messages/Telemetry_generated').PNTCI
const PNTCI = Object.assign(telem, require('../messages/header_generated').PNTCI)
/**
* @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;
PNTCI.Telemetry.finishTelemetryBuffer = function(builder, offset) {
builder.finish(offset);
};
// Exports for Node.js and RequireJS
this.PNTCI = PNTCI;
名称空间的使用对于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
};
由于节点中通常不需要名称空间,因此可能不需要在单个
PNTCI
变量下合并模块;模块可以单独导入到不同的变量中。如果在某些地方只使用其中的一些模块,这将使应用程序更加模块化。您提供的代码根本不包含模块。没有导出,因此不清楚您如何在它们上使用require
。不管问题是什么,它都是特定于Flatbuffers output.true@estus的,它们不是合适的模块。但是google在最后添加了允许node.js和Require.js导入的代码,我现在已经演示了这些代码。不客气。如果存在大量的消息,还可以迭代目录内容。