我已經得到了一些功能,允許在該模塊包含的功能很多的合併命名空間,非常類似於import
(我暴露的API與幾十個組合子) 它會產生大量的var f = target.f;
爲每命名空間進口
var paco = require('./paco.js');
eval(paco.getNamespace('paco', paco));
// instead of paco.between(paco.start(),paco.content(),paco.end())
between(start(), content(), end())
問題:
從出口function getNamespace(name, exports){
var output='';
for(var item in exports){
output += 'var ' + item + ' = '+name+ '.'+item + ';';
}
return output;
}
和使用項目
我有一種方法可以將eval隱藏到某些函數中嗎?我不希望既不改變全局命名空間,也不想調用vm.runInThisContext
,只需要在類似於require
的調用函數後添加一些局部變量到調用上下文中。
我的意思是我需要這樣的東西
import('./paco');
// this should work like this
// var paco = require('./paco.js');
// var between = paco.between;
但沒有全球性的突變和無EVAL在呼叫範圍內。
正如我所說的,我不能變異全球範圍內,因爲我當我使用幾乎所有的人作爲組合子 –
@MadHollander但你揭露他們都使用eval暴露幾十個功能和典型案例。 ''''''''和'global [item] = exports [item];'完全一樣'''除非你用' (function(){})();'你沒有提到。 – jcubic
其實沒有。當我從我的函數調用importn時,全局範圍是未觸及的。 –