Javascript 在模块使用时扩展模块;“出口”模块;

Javascript 在模块使用时扩展模块;“出口”模块;,javascript,node.js,module,extending,Javascript,Node.js,Module,Extending,我已经读了几页关于扩展模块的内容。它们围绕使用模块的函数形式展开,我从中了解了如何进行扩展 但我有两个这样的模块 util.js module.exports = { thing1: function() {// do thing1 stuff } } extend.js我无法更改的包(来自npm) 现在假装要使用util.js模块 const _ = require('util.js); let catin = _.thing1; // that's easy let

我已经读了几页关于扩展模块的内容。它们围绕使用模块的函数形式展开,我从中了解了如何进行扩展

但我有两个这样的模块

util.js

module.exports = {
    thing1: function() {// do thing1 stuff }      
}
extend.js
我无法更改的包(来自npm)

现在假装要使用util.js模块

const _ = require('util.js);

let catin = _.thing1;  // that's easy
let thehat = _.thing2;.  // this was util.js extended.
我可以在
util.js中这样做

const ex = require('extend.js')

module.exports = {
    thing1: function() {// do thing1 stuff }
    thing2: ex.thing2
}
没关系,因为extend.js只有一个要扩展的函数/方法,但我想将其扩展到我的util库中,但它有22个!要扩展的项目

一定有更好的方法是吗

我愿意重构我的util.js文件(但不是像我展示的那样手工编码每个扩展),这样它会自动扩展,但显然无法重构我没有维护的包,缺少一个fork…啊。对添加子交易也不感兴趣,如

  ex: ex 

_.ex.thing2  

想法?

因此,根据Molda的提示,我将分享我的想法,使这个问题对其他人更有用。我用一种简单的方法从(实用程序)模块文件夹和其他一次性软件包(如按位)构建(实用程序)模块

用它在say
lib/
中创建一个
utils.js
模块(您需要全部或部分这样的包)

现在创建一个子目录
lib/util/
,并用实用程序模块填充它。让其中一个模块包含此键/功能

merge_keys: function (obj1,obj2){
    var obj3 = {};
    for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; }
    for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; }
    return obj3;
}
并确保模块名称与此行中使用的键匹配
util=utils.object.merge\u keys(util,utils[key])
。在我的例子中,我在
lib/util/
中有一个包含
merge\u键的模块
object.js

然后只需要utils.js模块,所有模块都将作为一个模块,包括访问merge_keys函数以进行其他合并:-)

注意:模块之间不检查重复的密钥名

备注:

let self=
允许引用合并对象本身中的任何其他键,如
self.myfunctionkeyname()

看看如何合并两个对象。有时,你会陷入一个思维角落,看不到简单的答案。当然,我以前也合并过对象,但我非常关注“模块”。thx@Molda。如果你需要代表,那么写一篇帖子,我可以投票并选择作为我的答案。不要担心代表,我很高兴我能帮上忙。
  ex: ex 

_.ex.thing2  
let utils = require('require-all')(__dirname + '/util');
let bw = require('bitwise');

let self = module.exports = (function(){
let util={};
for (var key in utils) {
   util = utils.object.merge_keys(util,utils[key])
 }
 util = utils.object.merge_keys(util,bw)
 return util;
 }());
merge_keys: function (obj1,obj2){
    var obj3 = {};
    for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; }
    for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; }
    return obj3;
}
let _ = require('./lib/utils');
// see if it worked
console.log(_);