侧边栏壁纸
博主头像
chao's blog博主等级

记录学习所得,以及日常生活

  • 累计撰写 11 篇文章
  • 累计创建 0 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

记录保存在前端的excel文件,下载报错问题

Administrator
2024-09-12 / 0 评论 / 0 点赞 / 17 阅读 / 8812 字

问题简述

在开发项目的过程中,遇到了模板文件下载的功能。项目采用了前端项目存储模板文件的方案,将资源文件存储在 asset 目录下。

本地调试时,模板文件可以正常下载;但在发布到测试环境后,下载时会提示文件损坏。

调试

在本地打包后,构建产物中可以看到 Excel 文件存在于最外层目录,并且在项目中打印的模板文件路径也是正确的。

打包后Excel文件路径

原因

项目进行了多版本部署的改造,所有静态资源存放在 static 目录下。由于二级域名会映射到 static 目录,因此无法获取 static 外面的静态资源文件。

解决方案

需要修改 webpack 打包生成静态资源路径的配置。

webpack配置修改

webpack 中文文档 中有关于这个配置项的详细介绍。同时,文档中还有一个 publicPath 的配置项,那 filenamepublicPath 之间有什么区别呢?

filenamepublicPath 区别

webpack 配置中,rulesgenerator 属性用于控制文件资源模块的生成方式,其中 filenamepublicPath 是两个常用的配置项,常用于处理静态文件的路径和生成的文件名。

1. filename

  • 作用filename 决定生成文件的名称格式(包括文件路径)。用于指定输出文件的命名规则,常用于根据文件内容哈希生成文件名以实现缓存管理。

  • 示例:可使用占位符(如 [name][hash][ext] 等)来动态生成文件名。


module.exports = {

module: {

rules: [

{

test: /\.(png|jpg|gif)$/i,

type: 'asset',

generator: {

filename: 'images/[name].[hash][ext]'

}

}

]

}

};

在这个示例中,符合规则的图片文件将被输出到 images 文件夹中,且文件名会带有哈希值,以避免缓存问题。

2. publicPath

  • 作用publicPath 用于指定在浏览器中访问资源时的公共 URL 路径(例如资源的 CDN 或服务器路径)。它决定了在 HTML 文件中引用生成的文件时使用的路径。

  • 说明:通常用于告诉 webpack 在打包后,如何在 HTML 文件或其他静态资源中引用生成的文件。默认情况下,它是相对于服务器根目录的,但可以通过 publicPath 指定完整的 URL 或 CDN 路径。


module.exports = {

module: {

rules: [

{

test: /\.(png|jpg|gif)$/i,

type: 'asset',

generator: {

publicPath: '/assets/images/', // 浏览器中访问资源的路径

filename: 'images/[name].[hash][ext]'

}

}

]

}

};

在这个示例中,生成的图片文件名格式保持不变,但在 HTML 文件中引用这些图片时,路径将会是 /assets/images/

区别总结

  • filename:控制生成的物理文件名和文件存放路径。

  • publicPath:控制文件在浏览器端的引用路径,指定文件在 Web 上的访问路径。

通常,开发环境和生产环境的 publicPath 会配置不同的路径,例如生产环境使用 CDN,而 filename 则决定文件如何存储在文件系统中。

结尾

成功修改构建产物的路径后,模板文件可以成功下载。


0

评论区