@atlaspack/optimizer-inline-requires

中文文档
2.16.11发布于 2026/09/16(MIT OR Apache-2.0)TypeScriptCommonJS近 30 天下载 1746

此插件目前为 实验 /然而不稳定,这说明它已被用在一个非常大的网络应用程序中,在减少该应用程序的运行时间启动时间方面非常成功.

中文使用文档
文档目录5 节
  1. 快速使用
  2. 背景和动机
  3. 洞穴
  4. 间接费用
  5. 副作用

警告内含需要插件

此插件目前为 实验 /然而不稳定,这说明它已被用在一个非常大的网络应用程序中,在减少该应用程序的运行时间启动时间方面非常成功.

快速使用

添加此优化器以运行 第一个 (在细化前),用于联署材料捆绑.

{
  "optimizers": {
    "*.js": ["@atlaspack/optimizer-inline-requires", "..."]
  }
}

背景和动机

当Atlaspack以捆绑形式生产模块时,如果范围提升没有带来依赖性,它包括要求这些依赖性位于模块功能的顶端。 例如,在细化之前,一个模块可能看起来是这样的:

atlaspackRegister('abc123', function (require, module, exports) {
  var $def456 = require('def456');
  var $ghi789 = require('ghi789');

  exports.someFunction = function () {
    if ($def456.someOperation()) {
      return $ghi789.anotherOperation();
    }
    return null;
  };
});

当模块被初始化(即“模块工厂”被称作“模块工厂”)时,将获得 def456 财务报告和审定财务报表 ghi789 模块,立即呼叫他们的模块工厂,等等。 然而,两个模块直到 someFunction 导出被调用 。 例如,如果呼叫网站是这样的:

// other code..
var $abc123 = require('abc123');
element.addEventListener('click', () => {
  element.innerText = $abc123.someFunction();
});

...然后代码在 abc123 可能直到很久以后才被调用,或者根本不被调用。 在规模足够大的应用中,所有这些工厂功能的评价/执行时间在应用的性能衡量尺度中都可以看到.

这个插件做的是,它把那些 require 调用“ 懒惰” 或“ 延迟” 的评价要求—— 也就是说, 工厂功能只有在模块首次使用时才会执行 。 第一个例子是,产生的代码(先去后去)将像这样:

atlaspackRegister('abc123', function (require, module, exports) {
  var $def456;
  var $ghi789;

  exports.someFunction = function () {
    if ((0, require('def456')).someOperation()) {
      return (0, require('ghi789')).anotherOperation();
    }
    return null;
  };
});

修饰器将删除未初始化的变量,它还将简化 (0, ...) 在可能情况下,序列表达式.

必须指出,Atlaspack只执行一次工厂职能。 下级呼叫 require 将返回原工厂返回的模块。 见 require 代码在 packages/packagers/js/src/helpers.js 对于如何运作.

洞穴

间接费用

所以这里的主要警告是,我们现在正在将一个简单的可变访问器变成一个函数调用,每当模块被引用的时候. 对于较小的应用来说,这种间接费用可能不值得权衡,但对于更大的应用来说可能并不值得。 这就是为什么这个插件是可选的,因为您需要尝试它来确定它是否适合您.

副作用

当模块关闭时(例如,在 window (例如,A/CN.9/WG.III/WP.III/WP.1号文件)。 对于Atlaspack已查明具有副作用的资产(是否通过) package.json sideEffects 这些模块将 没有 有他们的 require 电话延期.

版本与发布记录

@atlaspack/optimizer-inline-requires 共发布 1,061 个版本,首次发布于 2024/08/20;过去 12 个月发布了 253 个版本。

版本发布日期距今
2.16.11latest2026/09/161 个月前
2.14.5-canary.5002026/09/161 个月前
2.14.5-canary.4992026/09/151 个月前
2.14.5-canary.4932026/07/163 个月前
2.14.5-canary.4922026/07/153 个月前
2.16.102026/06/224 个月前

其他发布通道:alshdevreleasescript → 2.14.15-alshdevreleasescript.0,alshintegrationtestslib → 2.14.15-alshintegrationtestslib.0,unified → 2.14.18-unified-f165f7d09.0,noselfbuild → 2.14.18-noselfbuild-63bde801d.0,typescript → 2.14.22-typescript-17c3d1dec.0,dev-inline-requires-reuse → 2.14.26-dev-inline-requires-reuse-bdc9ca9c3.0。

关于 @atlaspack/optimizer-inline-requires 的常见问题

@atlaspack/optimizer-inline-requires 是什么?

此插件目前为 实验 /然而不稳定,这说明它已被用在一个非常大的网络应用程序中,在减少该应用程序的运行时间启动时间方面非常成功.

如何安装 @atlaspack/optimizer-inline-requires?

在项目目录运行 npm install @atlaspack/optimizer-inline-requires,或使用 pnpm add / yarn add / bun add。

@atlaspack/optimizer-inline-requires 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@atlaspack/optimizer-inline-requires 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@atlaspack/optimizer-inline-requires 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >= 14.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@atlaspack/optimizer-inline-requires 可以商用吗?

@atlaspack/optimizer-inline-requires 使用 (MIT OR Apache-2.0) 许可。可在 MIT、Apache-2.0 中任选其一遵守。选择 MIT 时,宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@atlaspack/optimizer-inline-requires 的下载量有多少?

根据 npm 官方下载统计,@atlaspack/optimizer-inline-requires 在 2026/10/07 – 2026/11/05 这 30 天内被下载 1,746 次,日均约 58 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@atlaspack/optimizer-inline-requires 还在维护吗?

最新版本 2.16.11 发布于 2026/09/16(1 个月前);至今共发布 1061 个版本,其中过去 12 个月发布了 253 个;首次发布于 2024/08/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。