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

如何在Node.js中无需修改配置或扩展名运行.js文件为ES模块

解决思路与方案

1. 不修改package.json的前提下兼容测试与build脚本

核心是让Node.js区分测试文件和build.js的模块规范,无需全局修改type字段:

方案A:给测试文件指定ES模块后缀

将所有测试文件的后缀改为.mjs,Node.js会自动将这类文件当作ES模块解析,而原有的build.js(.js后缀)保持CommonJS解析逻辑,完全互不影响。

如果测试代码依赖浏览器环境API(如window、document),需要额外安装jsdom并在测试文件头部模拟环境:

import { JSDOM } from 'jsdom';
const dom = new JSDOM('<!DOCTYPE html>');
global.window = dom.window;
global.document = dom.window.document;

方案B:用Babel转译测试代码

通过Babel将测试文件中的ES模块语法转译为CommonJS,让Node.js可以直接执行:

  1. 安装依赖:
npm install --save-dev @babel/core @babel/cli @babel/preset-env
  1. 新建.babelrc配置文件:
{
  "presets": [["@babel/preset-env", { "targets": { "node": "current" } }]]
}
  1. 修改测试命令(在package.json的scripts中):
"test": "babel test --out-dir dist-test && node dist-test/**/*.test.js"

如果使用Jest等测试框架,可直接配置Jest启用Babel转译,无需手动处理转译输出。

2. 修复Webpack失效问题

如果之前修改了package.json的type字段导致Webpack报错,大概率是Webpack配置文件的模块规范不兼容:

  • 将Webpack配置文件的后缀改为.cjs(如webpack.config.cjs),这样即使package.json设置了"type": "module",Node.js仍会按CommonJS解析该配置文件,Webpack可以正常读取。
  • 若坚持使用.js后缀,需将配置文件中的module.exports改为ES模块的export default语法,同时确保Webpack版本支持ES模块配置(Webpack 5+已支持)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:57:21