vue项目build 之后,css文件加载图片或者字体文件时404的解决。

本文介绍如何使用ExtractTextWebpackPlugin插件配置Vue项目的CSS公共路径,解决背景图片相对路径引用问题。通过修改build/utils.js文件中的ExtractTextPlugin选项,确保CSS能正确引用静态资源文件夹内的图片。

ExtractTextWebpackPlugin 提供了一个 options.publicPath 的 api,可以为css单独配置 publicPath 。

对于用 vue-cli 生成的项目,dist 目录结构如下:

dist
├── index.html
└── static
    ├── css
    ├── img
    └── js

经常遇见的问题是 css 中 background-image 的相对路径不能正确的引用到 img 文件夹中。但是用 ExtractTextWebpackPlugin 的 publicPath 配置就可以。

更改 build/utils.js 文件中 ExtractTextPlugin 插件的options 配置:

    if (options.extract) {
      return ExtractTextPlugin.extract({
        use: loaders,
        publicPath: '../../',         // 注意配置这一部分,根据目录结构自由调整
        fallback: 'vue-style-loader'
      })
    } else {
      return ['vue-style-loader'].concat(loaders)
    }
Vue2 项目中,`public` 文件夹用于存放静态资源文件,例如图片字体文件或第三方库的独立脚本。这些文件不会经过 Webpack 处理,而是直接复制到构建输出目录(默认是 `dist`)的根目录下。因此,在引用这些资源需要注意路径配置。 ### 路径引用方式 1. 在 Vue2 中,通过相对路径访问 `public` 文件夹中的静态资源。 - 假设项目结构如下: ``` project-root/ ├── public/ │ └── images/ │ └── logo.png ├── src/ │ └── components/ │ └── HelloWorld.vue ``` - 如果需要在 `HelloWorld.vue` 组件中引用 `logo.png`,可以使用以下代码: ```vue <template> <div> <img src="/images/logo.png" alt="Logo" /> </div> </template> ``` 这里的 `/images/logo.png` 是基于 `public` 文件夹的绝对路径[^3]。 2. 静态资源放在 `public` 目录下的子文件,可以通过完整的路径进行引用。 - 例如,如果 `public/fonts/` 下有 `custom-font.woff` 字体文件,则可以在 CSS 或 HTML 中这样引用: ```css @font-face { font-family: 'CustomFont'; src: url('/fonts/custom-font.woff') format('woff'); } ``` ### 构建和开发环境注意事项 1. **开发环境**:在本地运行 `npm run dev` Vue CLI 使用的是 Webpack 开发服务器,默认会将 `public` 文件夹的内容作为静态资源提供服务。确保引用路径以 `/` 开头,否则可能导致路径错误。 2. **生产环境**:执行 `npm run build` 后,`public` 文件夹中的内容会被直接复制到构建输出目录(如 `dist/`)的根目录下。因此,必须确保所有引用路径与构建后的结构一致[^1]。 ### 解决路径问题的方法 1. **确认文件路径**:检查 `public` 文件夹中的文件是否放置在正确的子目录中,并且引用路径与其匹配。 2. **避免相对路径错误**:在引用 `public` 文件夹内的资源,尽量使用从项目根目录开始的绝对路径(例如 `/images/logo.png`),而不是相对路径。 3. **动态路径处理**:如果需要动态生成资源路径,可以通过 JavaScript 拼接路径来实现: ```javascript const imagePath = '/images/' + fileName; ``` ### 示例代码 以下是一个在 Vue2 项目中正确加载 `public` 文件夹内静态资源的示例: ```vue <template> <div> <h1>欢迎页面</h1> <img :src="logoPath" alt="Logo" /> </div> </template> <script> export default { data() { return { logoPath: '/images/logo.png' }; } }; </script> ``` ### 相关问题 1. Vue2 项目中如何处理 `public` 文件夹外的静态资源? 2. 如何在 Vue3 中正确引用 `public` 文件夹中的静态文件? 3. 在 Vue2 中,为什么某些静态资源无法正确加载,即使路径正确? 4. 如何优化 `public` 文件夹中的静态资源管理以提高性能?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值