合并两个或多个node.js需要将模块合并到一个命名空间中

合并两个或多个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

Google Flatbuffers为您想要的每个表创建in(AMD?)模块。我把它们都放在一个名为PNTCI的名字空间中

现在,我正在做一些丑陋和不直观的事情,通过对PNTCI名称空间进行连续包含,将名称空间合并在一起,如下所示:

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导入的代码,我现在已经演示了这些代码。不客气。如果存在大量的
消息,还可以迭代
目录内容。