gpt4 book ai didi

javascript - 限制 npm 依赖模块对 require(隔离)的使用

转载 作者:搜寻专家 更新时间:2023-11-01 00:06:21 26 4
gpt4 key购买 nike

有没有办法通过限制 require 的使用来require 一个 npm 模块?

例如,应用程序可以通过提供(作为上传)一个 npm 模块来扩展其某些功能,该模块可以满足给定的契约(Contract)(比如它导出一个类使用方法 process)。该模块,如果它知道将 require 的应用程序的源代码,它可能会 require('db').connect().flush() 或类似的东西。

此应用程序扩展可能需要来自其主机的任何内容并对其进行修改。 npm 是否允许限制/安全方法来处理这种情况(可能通过使用进程)?

谢谢。

最佳答案

Node.js 和 npm 都不提供沙箱模块的工具。尽管对模块的实际加载方式有一点了解,但我们可以轻松实现这种机制。

让我们看看,一个模块如何gets access to require :

Once require is ready, the entire loaded source code is wrapped in a new function, which takes in require, module, exports, and all other exposed variables as arguments. This creates a new functional scope just for that module so that there is no pollution of the rest of the Node.js environment.

实际上,我们可以在 source code 中看到确切的模板:

NativeModule.wrapper = [
'(function (exports, require, module, __filename, __dirname) { ',
'\n});'
];

因此我们可以利用相同的方法通过在 IIFE 中包装上传的模块在需要它之前:

(function (exports, require, module, __filename, __dirname) {

// module source

}(exports, undefined /* here's the trick */, module, __filename, __dirname);

现在我们可以安全地 require 包装模块,因为它无法再访问 require 函数。

关于javascript - 限制 npm 依赖模块对 require(隔离)的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37171057/

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