在 vm 脚本上下文中传递函数

2024-04-23

假设我有一个如下所示的库模块:

module.exports = {
    increment: function() {
         count++;
    }
}

我想在动态生成的脚本中使用它,如下所示:

(function() { lib.increment(); })();

通过将其传递到沙箱中:

var sandbox = {
    count: 1
    lib: require('./lib')
}
var script = new vm.Script('(function() { lib.increment() })();');
script.runInNewContext(sandbox);

我遇到的明显问题是,一方面我不能要求“lib”,因为“count”没有在 lib.js 中定义;另一方面,如果我定义var count在“lib.js”文件的导出上方,这个新的count变量而不是沙箱中的变量将受到影响。

以下是我希望遵守的限制:

  • 在生成的文件上使用 vm 而不是 eval() 或 require()
  • 在外部文件中定义“lib”
  • 没有修改自动生成的脚本,所以没有使用lib.increment.apply(context)或类似的

到目前为止我发现的唯一解决方案是预先添加lib生成的脚本中的函数作为字符串,或者直接在sandbox对象,我发现这是一个不太理想的选择。

似乎没有任何方法可以传递变量的上下文require call.


实现这一目标的一种方法是让您lib模块是一个接受上下文然后返回正确接口的函数。

lib.js

module.exports = function(context) {
  var count = context.count;
  return {
    increment: function() {
      count++;
    }
  };
};

main.js

var sandbox = {
  count: 1
};
sandbox.lib = require('./lib')(sandbox);
var script = new vm.Script('(function() { lib.increment() })();');
script.runInNewContext(sandbox);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 vm 脚本上下文中传递函数 的相关文章

  • AWS Lambda 提前结束(没有任何显式返回或回调)

    我在放入 AWS Lambda 中的一些 Node js 代码时遇到了一些问题 我需要进行几个异步调用 虽然第一个调用的行为符合我的预期 但 lambda 函数在第二个调用完成之前终止 返回值为 null 这让我认为 lambda 正在执行
  • 向 JS 计算器添加键盘支持时出现的问题

    我想为我的计算器添加键盘支持 当我用键盘按下操作 即 或 时 js将其视为数字 而不是操作 例如 当我通过点击计算 10 11 时 我将得到 21 作为结果 当我通过键盘输入时 我会得到 10 为什么会发生这种情况 是否可以改变它 div
  • 将组件注册到现有的 Vue.js 实例

    我是 Vue js 新手 我想注册一个本地组件 如下所述 https v2 vuejs org v2 guide components html Local Registration https v2 vuejs org v2 guide
  • Sails.js - 如何更新嵌套模型

    attributes username type email validated by the ORM required true password type string required true profile firstname s
  • RequireJS 文本插件和变量连接字符串

    我正在使用 RequireJS 文本插件来加载一些 html 模板 当我将字符串文字传递给 require 函数时 它工作正常 var templateHTML require text templates template name ht
  • IE8 和 9 上的 socket.io 问题

    Socket io 在除 IE8 和 9 之外的所有平台上都能完美运行 这是客户端要求 你们能帮忙解决这个问题吗 我一直在阅读所有类似的问题 但到目前为止我发现的大多数解决方案都无法解决 IE8 上的这个问题 这是结构 服务器端 var i
  • 如何在 javascript 或 jquery 中按尺寸对图像进行排序

    如何在 JavaScript 或 jQuery 中按尺寸对图像进行排序 我的代码如下 var imgsrc if document images length lt 1 alert No images to open return for
  • 数据表“footerCallback”函数未在页脚中显示结果

    我尝试获取每列的总和并将结果显示在页脚中 我在用着 页脚回调 https datatables net reference option footerCallbackDatatables提供的功能 但是它在页脚中没有显示任何内容 数据表解释
  • 如何删除从 javascript var 转义的反斜杠?

    我有这个变量 var x div class Which is div class 但是我需要 div class abcdef 我怎样才能 unes cape 这个变量来删除所有转义字符 您可以通过正则表达式将反斜杠后跟引号替换为仅引号
  • Javascript:通过将路径作为字符串传递给对象来获取对象的深层值[重复]

    这个问题在这里已经有答案了 可能的重复 使用字符串键访问嵌套的 JavaScript 对象 https stackoverflow com questions 6491463 accessing nested javascript obje
  • AngularJS - 服务、工厂、过滤器等中的依赖注入

    因此 我想在我的 Angular 应用程序中使用一些插件和库 目前 我只是引用这些函数 方法 因为它们是在 99 的应用程序中以完全忽略依赖注入的方式使用的 我有 例如 javascript 库 MomentJS 它处理格式化和验证日期 并
  • Node.js:server.setTimeout、server.timeout 和 server.keepAliveTimeout 之间有什么区别

    官方文档是here https nodejs org api http html http server settimeout msecs callback server setTimeout 中没有提及有关服务下一个请求的信息 所以我认为
  • 将数组中的所有元素相乘

    我在这里找不到我真正想要的例子 我想将所有数组元素相乘 因此如果数组包含 1 2 3 总和将为 123 6 到目前为止 我已经得到了这段代码 但它返回未定义 function multiply array var sum 1 for var
  • 更改特定字符串的颜色

    有谁知道如果将特定单词输入文本区域 我如何更改它的颜色 例如 如果用户输入 你好我的朋友 它会动态地将 你好 更改为绿色 在google上花了很多时间 找不到任何相关的东西 谢谢 textareas 的设计目的不是选择性着色
  • 清理 html 字符串中的所有脚本

    HTML5 剪贴板很棒 但我正在寻找一种使其安全的方法 用户正在将文本 html 粘贴到我的网页中 这允许他们粘贴图像 表格等 我正在寻找一种方法 在将粘贴的内容添加到页面之前删除所有脚本 我需要删除
  • d3力定向布局-链接距离优先

    在 d3 中使用力导向布局 如何使链接距离成为优先事项 同时仍然保持良好的图形布局 如果我指定动态链接距离 但保留默认费用 则我的图形距离会因费用函数而发生一些变形 并且不再是准确的距离 但是 如果我删除电荷 图表将如下所示 任何建议表示赞
  • 在多个数组中搜索字符串,然后设置 var - jQuery

    我正在寻找基于字符串存在于哪个数组中设置一个变量 例如 var primary red blue yellow var secondary orange purple green 然后检查 purple 并返回它在 secondary 数组
  • 角度 ng-repeat 根据条件添加样式

    我在 div 列表上使用 ng repeat 并且在渲染此 div 的 json 中手动添加项目 我需要定位我在 json 中添加的最后一个 div 它会自动在屏幕上渲染 即 couse 光标所在的位置 其余部分保持在相同位置 但没有给出渲
  • 如何制作过期/签名视频嵌入网址

    我是新来的 正在学习网络开发等等 我只知道如何将我的视频嵌入网站中 任何菜鸟都可以轻松获得源代码 他们也可以嵌入它 但在许多网站中 视频 src 均使用重定向器链接进行编码 例如 它会在一段时间后过期 在本例中是一天 我了解到这是一个签名网
  • React 错误:目标容器不是 DOM 元素

    我刚刚开始使用 React 所以这可能是一个非常简单的错误 但我们开始吧 我的html代码非常简单 load staticfiles

随机推荐

  • svg 中的简单填充图案:对角线阴影

    我如何填充 SVG 形状 不是使用单一颜色 图像或渐变 而是使用阴影图案 如果可能的话对角线 已经两个小时了 我什么也没发现 至少在2005年之后 我认为一个可能的破解方法是使用孵化的 PNG 作为填充 但这并不理想 我在互联网上也没有找到
  • 使用 Pandas/ExcelWriter 对单元格中的文本部分进行着色

    如何使用 pandas 数据框和 ExcelWriter 对写入 Excel 文件的部分文本进行着色 我已经设置了使用背景颜色和文本颜色以及不同内容来格式化单元格 但是您可以将格式设置仅应用于字符串 1 3 5 的单元格中的第一个逗号分隔值
  • 如何防止意外地在非常量对象上调用变异函数?

    假设我们有一个 myType 类型的对象 obj 并且我们希望将其传递给函数 Foo 该函数返回一些有关 obj 的有价值的信息 函数 Bar 是声明 obj 的地方 也是从中调用 Foo 的地方 如下所示 void Bar myType
  • Chrome 应用程序 localStorage 不持久并且 chrome.storage 不工作

    我有一个 chrome Kiosk 应用程序 我需要在机器打开和关闭之间保存数据 几个字节作为字符串 但无论我尝试什么 本地存储似乎在重新启动时都会被擦除 当我转到 chrome inspect apps 检查 Chrome 应用程序时 控
  • 合并并总结 Pandas 中的几个值计数系列

    我通常使用value counts 获取某个值出现的次数 然而 我现在处理大型数据库表 无法将其完全加载到 RAM 中 并在不到 1 个月的时间内查询数据 有没有办法存储结果value counts 并将其合并 添加到下一个结果中 我想统计
  • 数据表:根据隐藏列值隐藏行

    我在用dataTable在 jsp 中显示我的表的插件 我也想使用复选框选项 像这里的东西 数据表 根据列中的值过滤行 https stackoverflow com questions 29569492 datatables filter
  • 使用VB.NET上传文件到SFTP服务器

    我需要将文件上传到 SFTP 服务器 我正在使用 VB NET 2008 怎样才能上传一个简单的 csv使用端口号 用户名和密码等将文件从本地计算机传输到 SFTP 服务器 提前致谢 NET 常用的开源 SFTP 库是SSH NET htt
  • SFINAE 内部概念模板参数

    SFINAE 在概念论证中起作用吗 也许这里不叫SFINAE 例子 template
  • SwiftUI:类型不符合协议“UIViewRepresentable”//我的代码

    我正在开发一个新的 SwiftUI 应用程序 我正在尝试弄清楚如何使这个 Swift 项目与 SwiftUI 兼容 在此示例中 我正在开发带有方向的地图 问题是我无法使 UIViewRepresentable 工作 我收到错误 类型 Dir
  • Ruby on Rails:provide 与 content_for

    我今天遇到了视图辅助函数 provide 通过查看它的手册 我仍然对它与 content for 有何不同感到困惑 提供 名称 内容 nil 块 与 content for 相同 但与流式传输一起使用时会直接刷新 回到布局 换句话说 如果你
  • 如何在 Razor Pages 中返回带有对象的不同视图?

    在 NET Framework MVC中 我可以使用以下代码来完成 public class HomeController Controller public ActionResult Index Student student new S
  • ssrs 报告中的格式编号

    argh 受不了我自己也想不通 我在报告中的数字格式中使用了它 0 00 0 00 格式为 1 212 89 这不完全是我想要的 因为我想要 1 212 89 无论服务器的区域设置如何 所以我尝试了这个 0 00 0 00 但这给了我这个
  • 从 FeedParser 获取 Feed 并导入到 Pandas DataFrame

    我正在学习Python 作为实践 我正在使用 feedparser 构建一个 RSS 抓取器 将输出放入 pandas 数据帧并尝试使用 NLTK 进行挖掘 但我首先从多个 RSS 提要获取文章列表 我用这篇文章来了解如何传递多个提要 ht
  • CGridView 使用 Tab 时过滤重复的 Ajax 请求

    在我的 Web 应用程序中 我使用选项卡并根据 Ajax 加载部分视图 所以有可能我确实加载了相同的内容CGridView多次 无需重新加载页面 如果发生这种情况 如果我使用 我会变成重复的 Ajax 请求CGridView过滤器 过滤器和
  • 无法对 @KafkaListener 带注释的方法进行单元测试

    我正在尝试在 Spring 中对 kafka 消费者类进行单元测试 我想知道如果 kafka 消息发送到它的主题 则侦听器方法被正确调用 我的消费者类注释如下 KafkaListener topics kafka topics myTopi
  • 将浮点数向下舍入到最接近的整数?

    我想获取一个浮点数并将其向下舍入到最接近的整数 然而 如果它不是一个整体 我always想要向下舍入变量 无论它与下一个整数的接近程度如何 有没有办法做到这一点 int x 转换为整数将截断 朝向 0 0 例如math trunc 对于非负
  • 如何在VC++/MFC中替换字符串中两个子字符串之间的字符串?

    假设我有一个 CString 对象 strMain AAAABBCCCCCCDDBBCCCCCCCCDDDAA 我还有两个较小的字符串 例如 strSmall1 BB strSmall2 DD 现在 我想替换 strMain 中 strSm
  • 使用 Spring beans 作为带有 @Cacheable 注释的键

    如何使以下工作发挥作用 一个 spring bean 该 bean 具有应使用 Cacheable 注释进行缓存的方法 另一个为缓存创建密钥的 spring bean KeyCreatorBean 所以代码看起来像这样 Inject pri
  • 在 Angular X 的子模块中使用 AppModule 中的组件(X 代表 2+)

    我创建了一个小组件 LoadingComponent 在我的应用程序的根目录中并在我的应用程序中 显然 声明了它AppModule 该组件在我的应用程序加载时使用 并且应该显示一些精美的加载动画 现在我想在保存某些内容时在子模块中使用它 但
  • 在 vm 脚本上下文中传递函数

    假设我有一个如下所示的库模块 module exports increment function count 我想在动态生成的脚本中使用它 如下所示 function lib increment 通过将其传递到沙箱中 var sandbox