2015-12-07 78 views
0

讓我們考慮,我想重寫require()功能的情況下,但我想,以避免進一步的重新定義在某個時候。考慮以下情形:避免重新定義要求()

// I redefine require here 
var _require = require; 
require = function(){ 
    // some code to redefine original require 
} 
// After this redefinition shouldn't happen 

我知道這是可能的「凍結」使用對象的功能Object.freeze(obj)因此我不能發言後修改的對象。但是我找不到相當於Object.freeze()的全球/本地功能,例如require

+0

您在原則上可以嘗試凍結全局命名空間 - 'Object.freeze(窗口)在瀏覽器中'。但我不確定它是否會以這種方式工作。窗口名稱空間對象是一種特殊的。 –

回答

0

你要使用

Object.defineProperty(window, "require", { 
    // current `value` is used 
    writable: false, 
    configurable: false 
}); 

而且不要忘記隱藏在封閉範圍_require正常。

+0

謝謝!如何在Node.JS(Node.JS中沒有window對象)的情況下做到這一點,我可以使用像Object.defineProperty(GLOBAL,「require」)'嗎? – ebudi

+0

是的,您應該可以使用'global',但我不確定'require'是否實際上是node.js中的全局變量。 – Bergi

+0

@ebudi:請參閱[在node.js中存儲模塊變量的範圍?](http://stackoverflow.com/q/15406062/1048572)。所以你只能在你自己的模塊中重新定義'require',並且你幾乎不需要防止重新定義。 – Bergi