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

如何将给定CommonJS(CJS)代码转换为ES6规范写法

CommonJS 代码转 ES6 模块(ESM)改写方案

ESM 环境下没有 CommonJS 默认提供的 __filename、__dirname、require 全局变量,需要通过标准 API 实现等价逻辑,最终可运行的改写代码如下:

// 引入依赖模块
import path from 'node:path';
import { fileURLToPath } from 'node:url';
// 导入JSON配置文件,标准ESM要求导入JSON时添加类型断言
import configAll from '../config/config.json' assert { type: 'json' };

// 模拟CJS环境的内置路径变量
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// 原有业务逻辑完全保持一致
const basename = path.basename(__filename);
const config = configAll[env];

关键差异说明

  • __filename 实现:通过 import.meta.url 获取当前模块的文件URL,再用 fileURLToPath 转换为系统原生的文件路径,和CJS下的__filename行为完全一致
  • __dirname 实现:拿到__filename后通过path.dirname获取所在目录路径,等价于CJS的__dirname
  • JSON文件加载:ESM原生支持JSON导入,导入路径使用ESM标准的相对路径,相对于当前文件所在目录,和原代码中__dirname + '/../config/config.json'指向的路径完全一致;标准规范要求导入JSON时添加assert { type: 'json' } 类型断言告知运行环境加载的是JSON资源,如果你使用Vite、Webpack等构建工具,多数场景下可以省略该断言
  • 配置取值逻辑:如果env是运行时才会确定的动态值,静态导入整个JSON对象后取对应属性的写法和原来require()[env]的行为完全一致,不需要额外调整
  • 依赖导入注意:如果使用Node.js 16以下的版本,导入path、url模块时可以去掉node:前缀,写成import path from 'path'即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 11:57:21