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

Express后端执行npm start时出现chai TypeError: util.addProperty is not a function

问题描述

此前应用运行正常,昨日新增功能和测试用例(未添加任何新依赖,已通过Github提交记录确认)后,npm run test可正常执行测试,但执行npm run dev或npm start时,chai抛出TypeError: util.addProperty is not a function错误。

已尝试的操作

  • 搜索TypeError: util.addProperty is not a function,无相关有效结果
  • 重新安装chai和chai-as-promised
  • 删除node_modules并执行npm i重装所有依赖
  • 将Node.js从18.7.0升级至18.16.0

报错信息

~~/node_modules/chai/lib/chai/assertion.js:94
    util.addProperty(this.prototype, name, fn);
         ^

TypeError: util.addProperty is not a function
    at Assertion.addProperty (~~/node_modules/chai/lib/chai/assertion.js:94:10)
    at ~~/WechatBot_Server/node_modules/chai/lib/chai/core/assertions.js:48:15
    at Array.forEach (<anonymous>)
    at module.exports (~~/node_modules/chai/lib/chai/core/assertions.js:47:46)
    at exports.use 
(~~/node_modules/chai/lib/chai.js:39:5)
    at Object.<anonymous> 
(~~/node_modules/chai/lib/chai.js:71:9)
    at Module._compile (node:internal/modules/cjs/loader:1254:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1308:10)
    at Module.load (node:internal/modules/cjs/loader:1117:32)
    at Module._load (node:internal/modules/cjs/loader:958:12)

Node.js v18.16.0

package.json配置

"scripts": {
    "start": "node ./bin/www.js",
    "dev": "NODE_ENV=dev nodemon ./bin/www.js",
    "debug": "NODE_ENV=dev node --inspect ./bin/www.js",
    "test": "NODE_ENV=test mocha --recursive --exit --timeout 20000",
    "test:unit": "NODE_ENV=test mocha test/unit --recursive --exit --timeout 20000",
    "test:integration": "NODE_ENV=test mocha test/integration --recursive --exit --timeout 20000"
  },
  "dependencies": {
    "app-root-path": "^3.1.0",
    "axios": "^1.3.5",
    "bcrypt": "^5.1.0",
    "chatgpt": "^5.1.3",
    "cookie-parser": "~1.4.4",
    "cors": "^2.8.5",
    "crypto": "^1.0.1",
    "debug": "~2.6.9",
    "dotenv": "^16.0.3",
    "express": "~4.16.1",
    "handlebars": "^4.7.7",
    "hirestime": "^7.0.3",
    "http-errors": "~1.6.3",
    "ioredis": "^5.3.2",
    "jade": "~1.11.0",
    "jsonwebtoken": "^9.0.0",
    "lodash": "^4.17.21",
    "mint-filter": "^4.0.2",
    "mongoose": "^7.0.0",
    "morgan": "~1.9.1",
    "nodemailer": "^6.9.1",
    "nodemon": "^2.0.21",
    "openai": "^3.2.1",
    "path": "^0.12.7",
    "readline": "^1.3.0",
    "redis": "^4.6.4",
    "redlock": "^5.0.0-beta.2",
    "remark": "^14.0.2",
    "strip-markdown": "^5.0.0",
    "supertest": "^6.3.3",
    "swagger-ui-express": "^4.6.2",
    "winston": "^3.8.2",
    "winston-mongodb": "^5.1.1"
  },
  "devDependencies": {
    "chai": "^4.3.7",
    "chai-as-promised": "^7.1.1",
    "eslint": "^8.34.0",
    "eslint-config-airbnb": "^19.0.4",
    "eslint-plugin-import": "^2.27.5",
    "eslint-plugin-jsx-a11y": "^6.7.1",
    "eslint-plugin-react": "^7.32.2",
    "eslint-plugin-react-hooks": "^4.6.0"
  }

排查方向与解决方案建议

  1. 检查生产环境代码是否意外引入chai
    chai属于devDependencies,正常启动dev/start环境不应该加载它。排查业务代码(如bin/www.js、路由、工具类等),确认是否在非测试环境下不小心引入了chai或chai-as-promised(比如把测试代码的引用写到了业务逻辑里)。

  2. 排查NODE_ENV环境变量差异
    测试用NODE_ENV=test,dev用NODE_ENV=dev,start未指定环境变量。检查项目中是否有根据环境变量加载模块的逻辑,比如某模块在test环境下mock了util对象,但dev环境未做处理,导致chai依赖的util缺失addProperty方法。

  3. 检查依赖版本冲突
    执行npm ls chai查看chai的实际安装版本和依赖树,确认子依赖是否有版本异常。可以尝试锁定chai版本(将package.json中chai的^4.3.7改为4.3.7),重装依赖后测试。

  4. 排查命名冲突
    检查项目中是否有自定义的util模块,或某个依赖覆盖了全局util对象,导致chai加载的不是自身依赖的util模块。可在chai的assertion.js中临时添加console.log(util),查看输出对象定位来源。

  5. 清理缓存与回退lock文件
    执行npm cache clean --force清理npm缓存后重装依赖;若package-lock.json/yarn.lock有异常变更,可回退到之前正常版本后再重装。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:32:51