You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否将JS库内置到UMD打包产物中?Angular ng-packagr打包date-fns问题

方案1:库打包阶段内置date-fns代码(优先推荐,支持tree-shaking)

ng-packagr 提供了embedded配置项,可指定需要内置到最终UMD产物中的第三方依赖,不会将其标记为外部依赖,配置方法如下:

{
  ...
  "lib": {
    "umdModuleIds": {
      // 其余自带UMD的第三方依赖照常配置
      "ngx-mask": "ngx-mask"
    },
    "embedded": [
      "date-fns",
      "date-fns/locale",
      "date-fns-tz"
    ]
  }
  ...
}

配置完成后重新打包,原先的告警会自动消失,打包工具会自动对date-fns做tree-shaking,仅将你代码中实际用到的date-fns代码嵌入UMD包,不会全量引入,体积可控。如果当前使用的ng-packagr版本过低不支持embedded配置,将ng-packagr升级到v12及以上版本即可。

方案2:使用方侧适配方案

如果不方便调整库的打包配置,已经产出的UMD包默认依赖全局对象上的date-fns相关变量,使用方可通过手动挂载全局变量的方式适配:

  1. 安装date-fns、date-fns-tz依赖
  2. 在引入你的UMD库之前,先执行全局挂载逻辑,示例代码如下:
// 浏览器环境运行
import * as dateFns from 'date-fns';
import * as dateFnsTz from 'date-fns-tz';
import * as locale from 'date-fns/locale';

// 挂载到window全局对象
window.dateFns = dateFns;
window.dateFnsTz = dateFnsTz;
window.locale = locale;

// 挂载完成后再引入你的UMD库文件即可正常运行

如果使用方是通过script标签引入资源,也可自行打包一份date-fns的IIFE产物,直接通过script标签引入即可自动挂载对应全局变量,无需手动写挂载逻辑。

内容的提问来源于stack exchange,提问作者Diogo Soares

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:57:03