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

Angular构建时无法解析Node内置模块"timers"(依赖xml2js引发)

Angular构建时无法解析Node内置模块"timers"(依赖xml2js引发)

嘿,我之前也碰到过一模一样的问题!你这个情况其实很好捋清楚:xml2js这个库内部用到了Node.js专属的timers内置模块,但Angular默认的生产构建是针对浏览器环境打包的,浏览器里根本没有这个模块,所以打包工具(不管是Webpack还是现在的Esbuild)就会报错找不到它。而ng serve不管是开发还是生产模式,开发服务器的配置可能自动兼容了这类Node模块,所以能正常跑起来。

给你几个实用的解决办法,你可以按顺序试试:

1. 先检查xml2js版本,回退到之前能正常工作的版本

你说之前构建没问题,最近才出问题,很大概率是xml2js更新了版本,新增了timers的依赖。你可以打开package.json,把xml2js的版本号改成之前能正常构建的那个(比如之前是0.4.23,就写成"xml2js": "0.4.23"),然后删掉node_modules和package-lock.json(或者yarn.lock),重新执行npm install,再试试ng build。这个方法最简单,能快速验证是不是版本更新导致的问题。

2. 给浏览器环境添加Node内置模块的polyfill

如果不想回退版本,那就得给打包工具配置polyfill,让它在浏览器环境模拟timers模块的功能:

如果你用的是Webpack构建的Angular版本(Angular 15及以前默认)

  • 先安装polyfill插件:
npm install node-polyfill-webpack-plugin --save-dev
  • 在项目根目录新建一个webpack.config.js文件,内容如下:
const NodePolyfillPlugin = require('node-polyfill-webpack-plugin');

module.exports = {
  plugins: [
    new NodePolyfillPlugin()
  ]
};
  • 打开angular.json,找到你项目的build配置(路径:projects -> [你的项目名称] -> architect -> build -> options),添加一行配置指定webpack配置文件:
"webpackConfig": "webpack.config.js"

然后重新执行ng build应该就可以了。

如果你用的是Esbuild构建的Angular版本(Angular 16及以后默认)

  • 先安装需要的polyfill插件:
npm install @esbuild-plugins/node-globals-polyfill @esbuild-plugins/node-modules-polyfill --save-dev
  • 打开angular.json,找到项目的build配置,在options里添加esbuildOptions配置:
"esbuildOptions": {
  "plugins": [
    {
      "name": "@esbuild-plugins/node-modules-polyfill"
    },
    {
      "name": "@esbuild-plugins/node-globals-polyfill",
      "options": {
        "timers": true
      }
    }
  ]
}

保存后重新构建,问题应该就能解决了。

备注:内容来源于stack exchange,提问作者R1D3R175

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.16 08:53:04