【bug修复系列】package.json中“type”: “module”的作用,解决明明是ES module却报是CommonJS的问题

文章目录

一、问题描述

vite中,可以使用vite-plugin-static-copy工具将文件拷贝到指定的dist目录。

于是我开始构建:

bash 复制代码
npm run build

发现报错:

js 复制代码
failed to load config from D:\AIProject\translationChrome\vite.config.js
error during build:
Error [ERR_REQUIRE_ESM]: require() of ES Module D:\AIProject\translationChrome\node_modules\vite-plugin-static-copy\dist\index.js from D:\AIProject\translationChrome\vite.config.js not supported.
Instead change the require of index.js in D:\AIProject\translationChrome\vite.config.js to a dynamic import() which is available in all CommonJS modules.
    at _require.extensions.<computed> [as .js] (file:///D:/AIProject/translationChrome/node_modules/vite/dist/node/chunks/dep-BJP6rrE_.js:53946:9)
    at Object.<anonymous> (D:\AIProject\translationChrome\vite.config.js:37:38)

大意是因为 vite-plugin-static-copy 是一个 ES 模块,而我的 vite.config.js 使用的是 CommonJS 模块格式(require),这两者存在不兼容问题。Vite 配置文件默认是 ESM(ES Modules)格式,所以需要使用 import 而不是 require

二、问题解决

我确认了下vite.config.js中引入vite-plugin-static-copy确实是用import的方式的。

bash 复制代码
import { viteStaticCopy } from 'vite-plugin-static-copy';

按道理,不会有这种问题,因为其他模块也是这样,但是没有报错。

经过网上搜索和将问题丢给AI诊断,终于发现原来是我的package.json中没有配置 "type": "module",这个选项导致。

之前项目中有这个,只是没留意,那它的作用是什么:

When set to "module", the type field allows a package to specify all .js files within are ES modules. If the "type" field is omitted or set to "commonjs", all .js files are treated as CommonJS.

翻译过来的意思是:

当设置 "type": "module",时,允许package 中的所有的.js模块当做ES modules,但是如果该配置缺失或者设置为了"commonjs",那么就会当做CommonJS模块来处理。

而我的问题恰好是因为没有设置的原因,导致在构建时,当做了CommonJS来处理,从而报错。

所以,解决问题的方式就是在项目根目录下的package.json添加一行配置:

json 复制代码
{
    "type": "module", //加这一行
    "name": "translation",
  	"version": "1.0.0",
  	"description": ""
}

要不是遇到了这个问题,还真没留意到"type": "module",的作用。特此笔记记录。


如果你在web前端开发、面试、前端学习路线有困难可以在下方加我名片。

免费答疑,行业深潜多年的技术牛人帮你解决bug。

并可提供web前端开发,网站开发、技术咨询、答疑、直播讲座等服务。

祝你能成为一名优秀的WEB前端开发工程师!

相关推荐
东方-教育技术博主1 天前
论文全文翻译_通过VR课堂适应性反馈提升职前教师注意能力
json·vr
Random_index2 天前
#Vue3篇: Vue 项目发版后如何提示用户刷新?基于 package.json 版本号的前端更新检测方案
前端·vue.js·json
寻道模式2 天前
【开发心得】GA + 飞书频繁报错被忽略的“元凶”
json·飞书·ga
SelectDB技术团队2 天前
Agent 场景动态 JSON 性能拆解:Apache Doris 比 ClickHouse 快 7 倍、比 Elasticsearch 快 2 倍
数据库·clickhouse·elasticsearch·json·apache·日志分析·apache doris
Dontla2 天前
Claude Code如何管理自动执行的命令?(/permissions命令、settings.json、settings.local.json、命令权限)
json
不爱记笔记2 天前
GPT-5.6 Sol 真实项目实测!Bug修复、UI重构与帆船游戏复刻
人工智能·gpt·ui·chatgpt·bug·openai
蒙塔基的钢蛋儿2 天前
记一次 STM32H723 硬件 Bug 排查:写个 ETH 寄存器,SDRAM 数据飞了
stm32·嵌入式硬件·bug
荒诞英雄2 天前
从 17MB Vendor 大包到按需加载:Vite 多入口 Vue 组件库首屏优化实践
vue.js·vite
Amy187021118232 天前
UL证书只是起点——智能电表出口北美,真正的考验在量产之后
json
SelectDB2 天前
Agent 场景动态 JSON 性能拆解:Apache Doris 比 ClickHouse 快 7 倍、比 Elasticsearch 快 2 倍
数据库·json·agent