代码之家  ›  专栏  ›  技术社区  ›  Dr.YSG

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

  •  1
  • Dr.YSG  · 技术社区  · 7 年前

    现在,我正在做一些难看且不直观的事情,通过对PNTCI名称空间执行如下连续include操作,将名称空间合并在一起:

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

    同样的原因是自动生成的require模块有一个老式的格式,对于头文件\u 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;
    

    // 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;
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Estus Flask    7 年前

    名称空间的使用对于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 变量可能不需要;模块可以分别导入到不同的变量中。如果在某些地方只使用其中的一些模块,这将使应用程序更加模块化。

    推荐文章