gpt4 book ai didi

node.js - 覆盖 Node 中的 require() 行为

转载 作者:行者123 更新时间:2023-12-01 23:42:43 24 4
gpt4 key购买 nike

我正在寻找为 Node 中的项目创建基于权限的插件系统。为了便于写作,以及其他原因,我想允许自己调用一个插件:

var plugin = require('plugin');

这就是诀窍,我想强制 plugin 使用我的权限 api 系统,但我希望插件编写者能够执行如下操作:

var library = require('library');

这需要能够创建我自己的 require() 方法,并将其传递给插件/模块,这样他们就可以使用我的方法而无需任何更多工作。我的方法(最初)会像这样工作:


函数 myRequire(模块){
如果(满足权限)返回要求(模块);
抛出“您没有必要的权限;
}

这在 Node 中可行吗?

最佳答案

您可以覆盖 require.extensions 中的默认加载程序.但是,这个已被弃用,因此它可能随时从 Node.js 中删除。

例如:

var jsloader = require.extensions['.js'];

require.extensions['.js'] = function(module, filename) {
if (meetsPermissions(module)) return jsloader.apply(this, arguments);
throw new Error("You don't have the necessary permissions");
};

一些注意事项(除了弃用之外):

  • 这个函数会被所有的模块调用(包括 dependencies-of-dependencies),所以 meetsPermissions() 应该比较快
  • 内置模块(utilhttp 等)似乎没有被调用

另一种可能的解决方案是使用 vm 在沙箱中运行所有代码。模块。有各种更高级别的模块提供此功能,例如 node-sandboxed-module .

关于node.js - 覆盖 Node 中的 require() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32078312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com