gpt4 book ai didi

node.js - 将两个或多个 Node.js require 模块合并到一个命名空间中

转载 作者:太空宇宙 更新时间:2023-11-04 00:05:10 26 4
gpt4 key购买 nike

Google Flatbuffers 在(AMD?)模块中为每个需要的表创建。我将它们全部放在一个名为 PNTCI 的命名空间中。

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

const telem = require('../messages/Telemetry_generated').PNTCI
const PNTCI = Object.assign(telem, require('../messages/header_generated').PNTCI)

原因又是自动生成的 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
*/

文件末尾如下所示:

/**
* @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_ 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;

然后文件末尾如下所示:

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
};

由于 Node 中通常不需要命名空间,因此可能不需要在单个 PNTCI 变量下合并模块;模块可以分别导入到不同的变量中。如果在某些地方仅使用其中一些模块,这将使应用程序更加模块化。

关于node.js - 将两个或多个 Node.js require 模块合并到一个命名空间中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52649543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com