首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

  • 24-12-06 00:26
  • 2716
  • 7955
juejin.cn

如何配置vite.config.js使得json文件不被打包成js模块

从vite官方文档了解到

resolve.extensions​

  • 类型:  string[]
  • 默认:  ['.mjs', '.js', '.mts', '.ts', '.jsx', '.tsx', '.json']

导入时想要省略的扩展名列表。注意,不 建议忽略自定义导入类型的扩展名(例如:.vue),因为它会影响 IDE 和类型支持。

vite默认将json文件打包成js模块

assetsInclude​

  • 类型:  string | RegExp | (string | RegExp)[]
  • 相关内容:  静态资源处理

指定额外的 picomatch 模式 作为静态资源处理,因此:

  • 当从 HTML 引用它们或直接通过 fetch 或 XHR 请求它们时,它们将被插件转换管道排除在外。
  • 从 JavaScript 导入它们将返回解析后的 URL 字符串(如果你设置了 enforce: 'pre' 插件来处理不同的资产类型,这可能会被覆盖)。

内建支持的资源类型列表可以在 这里 找到。

示例:

js
代码解读
复制代码
export default defineConfig({ assetsInclude: ['**/*.gltf'], })

image.png

默认支持的文件类型,不包含json文件。由于以上原因,所以修改

  • build.rollupOptions.assetsFileNames
  • build.rollupOptions.chunkFileNames

都不起作用。

经查资料得到一个解决方案,使用fetch的方式获取json资源,而不能使用import。

❌ 错误的方式

js
代码解读
复制代码
import somejson from '@/assets/some.json' const data = ref(null) onMounted(() => { data.value = somejson; })

✅正确的方式

js
代码解读
复制代码
const data = ref(null) onMounted(async() => { const response = await fetch("src/path/to/file.json"); const file = await response.json(); console.log("cool file", file); })

fetch确实不会构建到一起,因为从本地资源变成了在线资源...

按照以上方式pnpm run dev可以正常运行,但是预览模式或线上会报资源文件404。 原因是fetch的url是相对路径,线上环境找不到资源。

解决办法

new URL()生成静态资源在线url。将以上代码改为

js
代码解读
复制代码
import somejson from '/assets/some.json' const data = ref(null) const getJson = async () => { const url = new URL('/assets/some.json', import.meta.url).href; const response = await fetch(url).then(res => res.json()) data.value = response; }

注:需要将json位置放在 /public 目录下。src目录下执行import会被构建成js模块。

最终方案

  1. 将json文件放在项目public目录下.

image.png

  1. 使用new URL('/assets/some.json', import.meta.url).href 生成在线url.

注意: new URL(param1, param2) 第一个参数不能使用模版字符串,否则会被编译。只能使用字符串

  1. 使用fetch(url)的方式获取json.

image.png

浏览器验证

image.png

完结撒花!!!

注:本文转载自juejin.cn的易码当先的文章"https://juejin.cn/post/7444745745422368803"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

104
前端
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top