CommonJS与ES模块兼容故障:预构建脚本动态导入仍报错求助
问题分析与解决方案
错误根源
你遇到的错误并非来自script.mjs,而是出自./src/helpers/file-helpers.js:Node.js默认会把无特殊声明的.js文件当作CommonJS模块处理,但该文件内部使用了ES模块的import语法,直接触发了解析错误。动态导入无法解决这个问题——因为Node在加载file-helpers.js时,会先判断模块类型并解析语法,错误在动态导入执行前就已经发生了。
可行解决方案(不破坏现有项目)
方案1:给目标文件目录单独添加模块声明
在src/helpers目录下创建一个仅包含模块类型声明的package.json:
{"type": "module"}
Node.js会优先读取文件所在目录的package.json,这样该目录下的.js文件会被当作ES模块解析,既不会影响项目根目录的配置,也无需修改文件名。之后重新执行node script.mjs即可正常运行。
方案2:修改目标文件的语法(若允许)
如果有权修改file-helpers.js,可以将其中的ES模块语法替换为CommonJS语法:
把
import fs from 'fs/promises';
替换为
const fs = require('fs/promises');
内容的提问来源于stack exchange,提问作者Santiago
相关产品推荐
相关产品推荐

