为什么用Vite导入JSON文件时报“Unexpected token”错误? 司马瑞玲 提问于 2026-01-26 14:44:31 阅读 102 工具 在Vue组件里用import引入本地JSON文件时突然报错,提示“Unexpected token {”。之前正常运行过,今天改了数据结构就崩了…… 代码是这样的: <script setup> import data from './data.json' console.log(data) </script> JSON文件结构没问题,试过重命名后缀、检查路径都正常。用CommonJS require反而能读到内容,但Vite+ESM方式就是报错,搞不懂咋回事…… JSON导入 我来解答 赞 7 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 端木冰冰 Lv1 Vite 默认不支持直接导入 JSON 文件,需要显式声明类型。 改一下代码:import data from './data.json' assert { type: 'json' } 如果还报错,检查 Vite 版本,升级到最新,或者在 vite.config.js 里加插件支持 JSON 导入。 回复 点赞 3 2026-02-18 07:02 Designer°正毅 Lv1 这个问题其实挺常见的,尤其是用 Vite 的时候。Vite 默认对 JSON 文件的支持确实有点特殊的地方,我来帮你一步步解决。 ### 第一步:确认 Vite 的版本 先检查下你用的 Vite 版本,因为不同版本可能处理方式稍微有点变化。打开终端,运行: npm list vite 如果是 3.x 或更新的版本,基本问题不大,继续往下看。如果是老版本,建议先升级一下: npm install vite@latest ### 第二步:理解报错原因 报错 Unexpected token { 是因为 Vite 默认不会直接将 JSON 文件作为模块导入,除非你显式地告诉它怎么处理。虽然 Vite 支持 JSON 导入,但有时候配置或者缓存的问题会导致它识别不出。 ### 第三步:修改配置文件 在你的项目根目录找到 vite.config.js(如果没有就新建一个),然后加上这段代码: // vite.config.js import { defineConfig } from 'vite' export default defineConfig({ // 确保开启 JSON 模块支持 optimizeDeps: { include: ['./data.json'] // 如果你的 JSON 文件路径不是这个,改成实际路径 } }) 这样做的目的是让 Vite 明确知道你需要把 data.json 当作模块处理。 ### 第四步:清理缓存并重启 有时候 Vite 的缓存会捣乱,导致配置改了也没效果。所以重启之前先清一下缓存: rm -rf node_modules/.vite npm run dev ### 第五步:验证代码 现在回到你的 Vue 组件,重新试试这段代码: <script setup> // 直接引入 JSON 文件 import data from './data.json' // 打印数据看看是否正常加载 console.log(data) </script> 如果一切正常,你应该能在控制台看到 JSON 数据了。 --- ### 补充说明 如果你还是有问题,可以试试以下几点: 1. **检查 JSON 文件内容**:确保没有语法错误,比如多余的逗号、未闭合的括号等。 2. **路径问题**:确认 ./data.json 路径是相对于组件文件的正确位置。 3. **尝试动态导入**:如果静态导入还是不行,可以用动态导入测试一下: const loadJSON = async () => { const data = await import('./data.json') console.log(data.default) // 动态导入时数据通常在 default 属性里 } 最后,如果还是搞不定,把完整的错误信息贴出来,我们再一起看看。这种问题其实挺烦人的,但一步步排查下来总能搞定! 回复 点赞 16 2026-02-01 10:11 加载更多 相关推荐 2 回答 69 浏览 Babel 转译 React JSX 时报错 Unexpected token,怎么回事? 我刚搭了个新项目,用 Babel 处理 React 代码,但一跑构建就报“Unexpected token”错误,指向 JSX 的尖括号。明明装了 @babel/preset-react,也配进去了,... Dev · 玉杰 工具 2026-03-20 11:29:23 1 回答 32 浏览 为什么 fetch 请求本地 JSON 文件会跨域? 我在本地用 VS Code 直接打开 HTML 文件,然后用 fetch 加载同目录下的 data.json,结果控制台报 CORS 错误,明明文件就在同一个文件夹里啊! 我试过把 json 文件内容... 南宫文茹 前端 2026-03-30 12:15:12 1 回答 43 浏览 为什么 fetch 请求本地 JSON 文件会跨域? 我在本地开发时用 fetch('data.json') 加载同目录下的 JSON 文件,结果浏览器报 CORS 错误,明明文件就在同一个文件夹里啊? 我试过直接双击 HTML 文件打开,也试过用 VS... 设计师春萍 前端 2026-03-11 03:27:18 2 回答 31 浏览 Vite打包库时为什么第三方依赖会被包含进输出文件? 我用Vite的Library模式打包一个React组件库,但发现打包后的文件包含了react-i18next的代码,明明在vite.config里设置了external排除。试过调整optimizeD... 萌新.一鸣 工具 2026-02-18 16:19:26 2 回答 66 浏览 Vite中使用glob导入组件后为什么路径报错? 大家好,我在用Vite+React项目里用glob导入组件时遇到了问题。按照网上的方法写了这样的代码: import { glob } from 'glob'; const com... 诸葛英洁 工具 2026-02-13 12:23:27 2 回答 78 浏览 Vite Library模式打包后为什么多出.eslintrc.js文件? 在用Vite的Library模式打包组件库时,发现生成的dist目录里多了一个.eslintrc.js文件,但配置里没配置要包含它。尝试过设置assetsInclude排除,但还是会出现,这是什么情况... 夏侯瑞娜 前端 2026-01-30 22:07:24 2 回答 82 浏览 为什么我的Vite插件在build时无法修改输出的JS文件内容? 我在用Vite写一个自定义插件,想在构建时给所有JS文件自动添加一段版权注释。按照文档用了transform钩子,开发服务启动时控制台确实打印了修改后的代码,但生成的dist文件里完全没有变化,这是为... 设计师璟春 工具 2026-01-28 00:32:25 2 回答 58 浏览 Vite 打包后 HTML 中的静态资源路径为什么不对? 我用 Vite 构建项目后,发现生成的 index.html 里引用的 JS 和 CSS 文件路径是相对路径,部署到子目录时就加载不到了。明明配置了 base 路径,但好像没生效? 比如我的项目部署在... 轩辕梦玲 前端 2026-03-16 07:46:23 1 回答 35 浏览 Postman数据驱动测试怎么读取外部JSON文件里的多组参数? 我在用Postman做接口的数据驱动测试,想从外部JSON文件里读取多组测试数据,但每次运行只跑第一条,后面的都没执行。是不是我的数据结构写错了? 我试过把JSON放在data里,也检查了Collec... Designer°爱娜 工具 2026-03-09 16:19:22 1 回答 29 浏览 Vite插件中如何正确处理React组件的动态导入? 我在写一个Vite插件,想在transform阶段动态替换某些React组件的导入路径,但总是报“React is not defined”的错误。明明组件本身在项目里能正常跑,插件处理后就不行了。 ... ❤硕辰 前端 2026-03-02 20:45:20
改一下代码:
import data from './data.json' assert { type: 'json' }如果还报错,检查 Vite 版本,升级到最新,或者在
vite.config.js里加插件支持 JSON 导入。### 第一步:确认 Vite 的版本
先检查下你用的 Vite 版本,因为不同版本可能处理方式稍微有点变化。打开终端,运行:
如果是 3.x 或更新的版本,基本问题不大,继续往下看。如果是老版本,建议先升级一下:
### 第二步:理解报错原因
报错
Unexpected token {是因为 Vite 默认不会直接将 JSON 文件作为模块导入,除非你显式地告诉它怎么处理。虽然 Vite 支持 JSON 导入,但有时候配置或者缓存的问题会导致它识别不出。### 第三步:修改配置文件
在你的项目根目录找到
vite.config.js(如果没有就新建一个),然后加上这段代码:这样做的目的是让 Vite 明确知道你需要把
data.json当作模块处理。### 第四步:清理缓存并重启
有时候 Vite 的缓存会捣乱,导致配置改了也没效果。所以重启之前先清一下缓存:
### 第五步:验证代码
现在回到你的 Vue 组件,重新试试这段代码:
如果一切正常,你应该能在控制台看到 JSON 数据了。
---
### 补充说明
如果你还是有问题,可以试试以下几点:
1. **检查 JSON 文件内容**:确保没有语法错误,比如多余的逗号、未闭合的括号等。
2. **路径问题**:确认
./data.json路径是相对于组件文件的正确位置。3. **尝试动态导入**:如果静态导入还是不行,可以用动态导入测试一下:
最后,如果还是搞不定,把完整的错误信息贴出来,我们再一起看看。这种问题其实挺烦人的,但一步步排查下来总能搞定!