按需require()

2024-05-06

假设我创建了一个库./libname其中包含一个主文件:main.js以及偶尔与主对象一起使用的多个可选库文件:a.js and b.js.

我创造index.js文件包含以下内容:

exports.MainClass = require('main.js').MainClass; // shortcut
exports.a = require('a');
exports.b = require('b');

现在我可以按如下方式使用该库:

var lib = require('./libname');
lib.MainClass;
lib.a.Something; // Here I need the optional utility object
lib.b.SomeOtherThing;

然而,这意味着我总是加载“a.js”和“b.js”,而不是在我真正需要它们时加载它们。

当然我可以手动加载可选模块require('./libname/a.js'),但后来我失去了美丽lib.a点符号:)

有没有办法实现某种索引文件的按需加载?也许,一些package.json魔法在这里能发挥得很好吗?


如果您调用“MainClass”来按需动态加载附加模块,则这可能是可能的。但我怀疑这也意味着对 api 进行调整以访问该模块。

我猜你的动机是“避免”“非必需模块”使用的额外处理。 但请记住 Node 是单线程的,因此加载模块的内存占用不是每个连接的,而是每个进程的。加载模块是将其加载到内存中的一次性操作。

换句话说,这些模块仅在您启动服务器时加载,而不是每次有人发出请求时加载。

我认为您从客户端编程的角度来看这个问题,当需要节省处理和/或 http 请求时加载脚本是有优势的。

在服务器上,您最多可以节省内存中的一些额外字节。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按需require() 的相关文章

随机推荐

  • 选项卡式导航

    我真的很难弄清楚如何执行以下操作 我想要有两个选项卡 水平相邻 一个用于搜索 并如此标记 另一个用于帖子 如此标记 当选择搜索选项卡时 我希望出现一个搜索框 当选择帖子选项卡时 我希望出现另一个搜索框 我不想隐藏搜索框 我猜它本质上是使用
  • 从 Json Python 获取特定字段值

    我有一个 JSON 文件 我想做的是获取这个特定字段 id 问题是当我使用json load input file 它说我的变量data是一个列表 而不是字典 所以我不能做类似的事情 for value in data id print d
  • Jquery 事件处理程序返回值

    返回值有什么用处吗 click and change 处理程序 如return true or return false return false 将阻止事件冒泡AND抑制默认操作 换句话说 返回 false 类似于这两行 event st
  • 获取已连接 USB 设备的端口名称

    当USB设备连接到计算机时 如何使用C 代码获取它所连接的端口名称 我找到了很多方法来查找 USB 何时连接 断开 驱动器号 路径 设备 ID 等 但没有找到任何明确的示例来说明如何知道它连接到哪个端口 我看到了一种可能的解释 但这涉及很多
  • MbUnit v3 中的UsingFactories 替代方案

    我试图弄清楚如何在 MbUnit v3 中编写组合测试 网上的所有示例代码均参考MbUnit v2 这意味着使用3个属性 组合测试 Factory 使用工厂 在 MbUnit v3 中 没有 usingFactories 属性 并且 Fac
  • 删除networkx有向图中入度和出度等于1的所有节点

    假设我在 NetworkX 中制作了一个有向图 import networkx as nx G nx DiGraph n A B C D E F H I J K L X Y Z e A Z Z B B Y Y C C G G H G I I
  • 算法:最大计数器

    我有以下问题 您有 N 个计数器 最初设置为 0 并且您对它们有两种可能的操作 increase X 计数器 X 加 1 max counter 所有计数器都设置为任何计数器的最大值 给出一个包含 M 个整数的非空零索引数组 A 该数组代表
  • 修改 Android 可绘制对象的颜色

    我希望能够使用相同的可绘制对象来表示两者 and 作为相同的可绘制对象 并根据某些编程值重新为可绘制对象着色 以便最终用户可以重新主题化界面 做这个的最好方式是什么 我已经尝试过 并重复使用了其中的图标 这个以前的S O 问题 https
  • SecurityApplicationGroupIdentifier 的应用程序组返回 nil

    我设置了一个应用程序组与我的 Today Extension 一起使用 我在主应用程序的目标和扩展程序的目标中添加了应用程序组 在开发人员门户的应用程序 ID 配置中 我启用了应用程序组 但由于某种原因FileManager default
  • 在 IEnumerable 上使用 Seq 函数 [重复]

    这个问题在这里已经有答案了 我正在尝试在 IEnumerable 上应用 Seq 函数 更具体地说 它是System Windows Forms HtmlElementCollection它实现了ICollection and IEnume
  • 加速度计和校准 - iPhone SDK

    我需要在 iPhone 游戏中使用加速计的功能 我只需通过倾斜设备来移动图像即可 然而 YouTube 上的大多数视频仅显示以某种方式反转的倾斜功能 而忘记包含校准 我希望用户将他们的设备校准到他们所处的任何位置 有谁知道我应该如何开始 我
  • 如何编写简单的运动跟踪代码?

    我正在制作一个带有伺服系统和彩弹枪的哨兵炮塔 需要实现实时运动跟踪以使枪射击任何移动的东西 我该如何编码 任何好的算法 书籍 教程 我想自己制作而不是使用预制的解决方案 带有卡尔曼滤波的 Lucas Kanade 是最基本的运动跟踪算法 然
  • 如何在 Vue 中动态创建的组件上获取更新的 $refs?

    我的组件数量取决于数组数量 因此当我向数组添加新项目时 它应该创建新组件 当创建新组件时 我想获得它的参考 这就是我有误解的地方 最后添加的组件是undefined当我试图得到它时 但是 如果我在一段时间后尝试获取参考 它就会起作用 我猜这
  • 添加动态复选框处理 CheckedChanged 事件 ASP.NET

    我想知道为什么事件没有触发以及如何找到哪个复选框控件触发了事件 chkList1 new CheckBox chkList1 Text row subj nme ToString chkList1 ID row subjid ToStrin
  • 如何在android中向服务器发送数据[重复]

    这个问题在这里已经有答案了 我想在我的应用程序中循环发送纬度和经度 这是使用 GPS 获取此参数的函数 private void showLocation Location location String latitude Latitude
  • C# 中的异常转换

    为什么我会得到一个InvalidCastException当尝试这样做时 throw ArgumentNullException new Exception errormessage null 这是以下函数的简化版本 public stat
  • 如何删除字符串中的所有前导零

    如果我有一个字符串 00020300504 00000234892839 000239074 我怎样才能去掉前导零 这样我就只有这个 20300504 234892839 239074 请注意 上面的数字是随机生成的 ltrim http
  • 为什么 VectorBuilder 位于 scala.collections.immutable 包中?

    VectorBuilder在同一源文件中定义为Vector Vector是不可变的并且在scala collections immutable包 因此构建器位于同一个包中 据我所知 CanBuildFrom uses a VectorBui
  • 在 C++ 中将 64 位值左移 64 位给出奇怪的结果[重复]

    这个问题在这里已经有答案了 可能的重复 64位移位问题 https stackoverflow com questions 1024968 64bit shift problem 我在 Windows 8 64 位上使用 Visual St
  • 按需require()

    假设我创建了一个库 libname其中包含一个主文件 main js以及偶尔与主对象一起使用的多个可选库文件 a js and b js 我创造index js文件包含以下内容 exports MainClass require main