如何从require对象获取module.export外部定义的属性

时间:2018-04-01 08:51:37

标签: node.js

我正在努力从我使用该模块的对象中获取const.exports之外的const属性。这是一个简单的例子:

ServiceX.js

const _ = require('lodash');
module.exports = {
  testFirstName: function () {
    console.log('Nodics');
  }
}

ServiceY.js

const utils = require('utils');
module.exports = {
  testLastName: function () {
    console.log('framework');
  }
} 

现在如果我通过require导入两个文件并通过_.merge()合并。输出文件包含两种方法,但它不包含任何const变量定义外部导出。

let combined = _.merge(require('ServiceX'), require('ServiceY'));

将这个结合到第三个文件中的一些MyService

即使我通过console.log(combined)打印这个组合对象,我只得到两个函数,而不是const属性。

我有的用例: 我在不同的位置有n个文件,我需要读取文件,合并所有文件并创建一个包含合并内容的新文件。

请帮助我,

由于

1 个答案:

答案 0 :(得分:0)

这里的问题是服务目前看起来像:

const _ = require('lodash');
module.exports = {
  testFirstName: function () {
    console.log('Nodics');
  }
}

原因是 if 如果你读取所有文件并连接结果,那么module.exports将被最后一个读取文件覆盖。

但如果它看起来像:

const _ = require('lodash');
module.exports.testFirstname = function () {
  console.log('Nodics');
}

您可以在所有服务上执行fs.readFileSync()并将结果连接起来。

您也可以将其作为构建命令,而不是代码:

cat service*.js > combined.js

你很可能遇到其他问题,因为如果一个服务使用const _ = require('lodash')而另一个服务使用同样的服务,你会尝试重新定义一个const变量。

为了解决这个问题,你可以将你的需求转移到另一个范围,这样他们就不会在文件级范围内发生冲突。