vite4.x+React批量导入图片打包部署后不显示
vite.config.ts
中配置了assetsDir: 'statics',
打包之后的图片都在statics
目录中,导入图片的代码如下:
const images = import.meta.glob('@/assets/images/sample/rack/*.png')const [imgUrlsMap, setImgUrlsMap] = useState<any>()useEffect(() => { Promise.all( Object.keys(images).map(async (key) => { const module: any = await images[key](); const imageUrl = new URL(module.default, import.meta.url).href return imageUrl; }) ).then((urls) => { // const ImgPathMap: any = urls.reduce((total: any, current: any) => { return { ...total, [current?.split('/')?.slice(-1)[0]?.split('.')[0]]: current// 值:http://localhost:3187/imh_view/src/assets/images/sample/rack/6.png } }, {}) setImgUrlsMap(ImgPathMap) })}, []) { rackSpeci?.map((item: any, idx: number) => ( <Col key={idx} style={{ display: 'inline-block', marginBottom: 10, marginRight: 6}}> <img className={styles.rackImg} title={item.remark} src={idx === imgIdx ? imgUrlsMap[`${item.rule}-${item.rule}`] : imgUrlsMap[item.rule]} onClick={() => onSpeciSelect(item,idx)} /> <div style={{ textAlign: 'center'}}>{ item.name }</div> <div style={{ textAlign: 'center'}}>({ item.rowNum + 'X' + item.columnNum })</div> </Col> )) }
得到的图片地址:http://localhost:3187/imh_view/src/assets/images/sample/rack/6.png
问题描述:在本地开发环境中图片能显示出来,打包部署之后不显示,审核元素查看img元素甚至没看到src属性,请问该如何解决呢
图片不要用 vite 来处理,直接扔到 public 里。
上线之后如果需要处理,写服务器脚本或者在服务器端来做。
图片在打包部署后不显示的问题通常与路径处理有关。在 Vite 打包过程中,静态资源(如图片)会被处理并放在构建输出的特定目录中,通常不是源代码目录。因此,在部署后,如果你还使用源代码目录的路径去访问图片,图片将找不到。
你得到的图片地址 http://localhost:3187/imh_view/src/assets/images/sample/rack/6.png
显然是指向源代码目录的,这不是打包后的正确路径。
解决这个问题,你需要确保在部署环境中使用正确的资源路径。以下是一些可能的解决方案:
使用 publicPath
:
你可以在 vite.config.ts
中设置 publicPath
来定义资源的基础路径。这通常是你的部署目录的路径。
// vite.config.tsexport default { // ... base: './', // 如果你在根目录部署,设置为'./',否则设置为实际的部署路径 publicPath: '/', // 或者根据你的部署环境设置 // ...}
这样,Vite 就会将公共路径添加到所有的资源 URL 中。
动态构建图片路径:
在构建后,你需要确保图片路径是根据部署目录来动态生成的。通常,这涉及到获取 import.meta.url
并在其上构建相对路径。
const images = import.meta.glob('@/assets/images/sample/rack/*.png');useEffect(() => { Promise.all( Object.keys(images).map(async (key) => { const module = await images[key](); const imageUrl = new URL(module.default, import.meta.url).href; // 确保 imageUrl 是相对于构建后的 publicPath return imageUrl; }) ).then((urls) => { // ...你的代码逻辑 });}, []);
dist
目录)被正确配置为可访问。如果上述方法仍然不工作,请进一步检查你的部署配置,确保 Vite 打包后的资源路径与服务器设置相匹配。
此外,对于图片资源的批量导入,你可能还需要检查 Vite 的版本以及是否有任何已知的关于批量导入的 bug 或更新。查看 Vite 的文档和更新日志可能有助于解决特定于版本的问题。
看完前面的文档,你会发现使用 Blade 开发Web应用是简单的、快速的,当然也功归于约定。 我们使用 Maven 构建项目,打包同时也可以用它,如果你对 Maven 插件熟悉的话可能也用过了, 当然没用过也没关系,你只需要按照下面的操作配置一下即可。 打包工程 添加插件 <build> <finalName>hello</finalName> <plugins>
打包 直接使用下面命令,就可以把vue项目打包: $ npm run build 如下: siwei@siwei-linux:/workspace/test_vue_0613$ npm run build > test_vue_0613@1.0.0 build /workspace/test_vue_0613 > node build/build.js ⠦ building for prod
Spring和Spring Boot都支持maven和Gradle通用打包管理技术。 Spring Boot相对Spring的一些优点: 提供嵌入式容器支持; 使用命令java -jar独立运行jar; 部署时可以灵活指定配置文件; 最近项目是分布式的项目,都是通过分项目打包部署,然后部署在docker中运行。
React+Antd打包部署之后报错: ReferenceError: require is not defined 看错误信息应该是react-dom文件里用到了require,但是路由好像没问题,是点击按钮的时候报错了,整个页面不能看 错误信息截图: vite.config.js代码: 期望消除错误
问题内容: 我正在尝试使用带有以下命令的命令提示符来编译我的Java文件’check4PrimeTest.java’: javac -classpath。:junit.jar check4PrimeTest.java 我收到以下错误: 错误:包junit.framework不存在import junit.framework。*; 我不确定为什么会收到此错误,因为我在程序中导入了junit.fram
我试图编译我的java文件'check 4PrimeTest.java'使用以下命令的命令提示符: javac-classpath.:朱尼特。jar CHECK4优先测试。JAVA 我得到以下错误: 错误:包junit。框架不存在导入junit。框架。*; 我不确定为什么会出现这个错误,因为我已经导入了junit。框架。*在我的节目里。 下面是我的代码: