Javascript 避免重新定义require() 让我们考虑一个案例,我想重写要求()/代码>函数,但我希望它避免在某些时候进一步定义。考虑下面的场景: // I redefine require here var _require = require; require = function(){ // some code to redefine original require } // After this redefinition shouldn't happen

Javascript 避免重新定义require() 让我们考虑一个案例,我想重写要求()/代码>函数,但我希望它避免在某些时候进一步定义。考虑下面的场景: // I redefine require here var _require = require; require = function(){ // some code to redefine original require } // After this redefinition shouldn't happen,javascript,node.js,Javascript,Node.js,我知道可以使用object.freeze(obj)来“冻结”对象的函数,因此不允许在语句之后修改对象。但是我找不到与Object.freeze()等价的全局/局部函数,例如require您将要使用的 Object.defineProperty(window, "require", { // current `value` is used writable: false, configurable: false }); 不要忘记在闭包范围内正确地隐藏\u require。

我知道可以使用
object.freeze(obj)
来“冻结”对象的函数,因此不允许在语句之后修改对象。但是我找不到与
Object.freeze()等价的全局/局部函数,例如
require

您将要使用的

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

不要忘记在闭包范围内正确地隐藏
\u require

原则上,您可以尝试在浏览器中冻结全局命名空间-
对象。冻结(窗口)
。但我不确定它是否会以这种方式工作。窗口名称空间对象有点特殊。谢谢!如何在Node.JS的上下文中实现这一点(Node.JS中没有
窗口
对象),我可以使用类似
object.defineProperty(全局,“require”)
?是的,您应该可以使用
GLOBAL
,但我不确定
require
是否实际上是Node.JS中的全局变量。@ebudi:请参阅。因此,无论如何,您只能在自己的模块中重新定义
require
,并且几乎不需要阻止重新定义。