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

JavaScript如何合并重复require导入实现公共依赖统一引入

实现方案

完全可以把重复的导入、初始化逻辑抽成公共文件,每个测试文件只需要单行引用即可,推荐用无全局污染的函数传参方案,兼容性最好:

方案实现步骤

  • 新建公共初始化文件
    在项目的公共工具目录(比如根目录下新建test-common文件夹),创建module-test-init.js文件,写入以下公共逻辑:
const path = require('path');
const { formatData } = require('utils');

/**
 * 初始化单模块测试所需的依赖与预处理数据
 * @param {string} moduleDir 当前模块所在目录的绝对路径,传__dirname即可
 * @returns 测试需要用到的所有变量
 */
module.exports = function(moduleDir) {
  const runAnalysis = require(path.resolve(moduleDir, 'index.js'));
  const { data } = require(path.resolve(moduleDir, 'data.js'));
  const formattedData = formatData(data);

  return {
    runAnalysis,
    data,
    formattedData
  }
}
  • 改造各模块的index.test.js
    原来的4行重复代码全部删除,只需要保留1行引用+初始化的代码即可:
// 注意调整相对路径,匹配你公共文件的实际存放位置
const { runAnalysis, data, formattedData } = require('../../test-common/module-test-init')(__dirname);

// 后面直接写原有测试逻辑即可,所有变量和之前写4行代码时完全一致

注意事项

  • 不要在公共文件里直接写require('./index')、require('./data'):CommonJS的require路径是相对于当前执行require的文件所在目录解析的,公共文件不在模块文件夹内,直接写相对路径会找不到对应模块文件,必须通过传入的__dirname(当前测试文件所在的模块目录绝对路径)拼接路径加载。
  • 不推荐用全局变量挂载的方式抽离逻辑:把变量挂到global对象上会造成全局污染,多测试文件并行执行时容易出现变量串改的问题,排查成本极高,用函数返回解构的方式依赖清晰,没有副作用。
  • 如果是ESM规范的项目(package.json中配置"type": "module"),只需要把公共文件的require替换为import,调用时传入path.dirname(fileURLToPath(import.meta.url))代替__dirname即可,核心逻辑不变。

内容的提问来源于stack exchange,提问作者s-hunter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:01:11