详解vue静态资源打包中的坑与解决方案

接下来我将详细讲解“详解vue静态资源打包中的坑与解决方案”的完整攻略。

一、问题描述

Vue开发中,经常需要使用一些静态资源,如图片、字体等。但是,当我们将Vue项目打包后,这些静态资源文件在文件系统中的路径就会变化,这就会导致引用不到这些资源从而导致网页无法正确显示。

二、原因分析

静态资源路径问题通常由Webpack打包机制引起的。Webpack 在将代码打包压缩时,会基于“依赖图谱”来决定每个依赖项在 bundle 中的位置,因此在处理静态资源路径时也会遵循这一机制。具体来说,当Webpack在处理代码中的静态资源引用时,会将资源从源代码路径中复制到打包文件夹中,并在HTML文件中自动插入相应的路径,但是默认情况下它并不支持在index.html指定contextRoot,需要手动配置。

三、解决方案

我们可以通过以下两种方式来解决这个问题。

方案一:使用vue.config.js中的publicPath属性

Vue Cli 3.x默认把静态资源存放在public文件夹中,因此我们可以通过设定publicPath来更好地处理静态资源路径。publicPath是一个在 index.html中引入的公共路径,它也会在构建之前被插入到所有(URL)里面。具体操作方式如下:

  1. 在Vue工程目录下新建vue.config.js文件,内容如下:
module.exports = {
  publicPath: './',
}
  1. 使用正斜杠代替相对路径

一旦设定了publicPath为./,在 HTML、CSS、JS 文件中的相对路径(../../xxx.css)都会被解析为(./../../xxx.css)。因此,我们在引用静态资源时只需使用正斜杠代替相对路径即可:

<img src="/assets/logo.png" alt="logo">

方案二:将所有静态资源放入assets文件夹中

这是另一种推荐的做法,我们可以将所有静态资源都放在assets文件夹下,通过assets/js、assets/css、assets/images这样的目录结构来管理这些资源,同时在构建时加入对应的Webpck loader来编译、压缩这些资源。这种方法的好处是可以方便地统一管理静态资源文件,并且可以更好地避免资源路径问题。

具体操作如下:

  1. 在 Vue 工程目录下,创建assets文件夹

  2. 在assets/js、assets/css、assets/images目录下分别添加js、css和图片文件

  3. 在vue.config.js中添加loader配置,这里以压缩图片的loader为例

let path = require('path')

module.exports = {
  configureWebpack: {
    module: {
      rules: [
        {
          test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
          use: [
            {
              loader: 'image-webpack-loader',
              options: {
                bypassOnDebug: true,
                disable: true,
                mozjpeg: {
                  progressive: true,
                  quality: 75
                },
                optipng: {
                  enabled: false,
                },
                pngquant: {
                  quality: [0.75, 0.9],
                  speed: 4
                },
                gifsicle: {
                  interlaced: false,
                },
                webp: {
                  quality: 75
                }
              }
            }
          ]
        }
      ]
    }
  }
}

四、总结

通过以上两种方法,我们可以很好的解决Vue静态资源路径打包问题。但是需要注意的是,如果我们使用了相对路径,那么在部署时,我们需要确保部署到的目录与路径是一致的。因此,在使用Vue进行开发时,我们应该尽量避免使用相对路径。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解vue静态资源打包中的坑与解决方案 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue2.2.0+新特性整理及注意事项

    Vue2.2.0+新特性整理及注意事项 Vue.js是一个流行的JavaScript框架,它是一个数据驱动、构建用户界面的渐进式框架。Vue2.2.0是Vue.js的一个重要版本,引入了一些新特性以及注意事项。本文将详细讲解Vue2.2.0+新特性整理及注意事项。 新特性 新增v-model指令的修饰符 在Vue2.2.0中,v-model指令新增了修饰符 …

    Vue 2023年5月28日
    00
  • 让你30分钟快速掌握vue3教程

    下面是详细讲解“让你30分钟快速掌握Vue3教程”的完整攻略: 1. 前置知识 在学习Vue3之前,最好了解以下知识: 基本的HTML、CSS和JavaScript知识。 Vue.js的基本概念和语法。如果你不了解Vue.js,请先学习Vue.js的教程。 2. 安装以及项目搭建 首先要安装Vue.js 3。可以使用以下命令安装: npm install -…

    Vue 2023年5月27日
    00
  • 详解VUE单页应用骨架屏方案

    标题:详解VUE单页应用骨架屏方案 什么是骨架屏 骨架屏即为页面骨架,通俗点来说就是一个页面还没加载完成时,所出现的一种页面展示方案。它将页面大致的结构和样式提前定义好,填充占位元素在视觉上证明了页面正在加载。而实际上用户看到的只是一个假象,等待页面正式加载完成后,占位元素会被替换成真实的内容。 骨架屏在VUE单页应用中的应用 在VUE单页应用中,页面通过异…

    Vue 2023年5月28日
    00
  • Vue2 this直接获取data和methods原理解析

    下面是“Vue2 this直接获取data和methods原理解析”的完整攻略。 Vue2 this直接获取data和methods原理解析 在Vue2中,我们可以直接通过this关键字获取组件实例里的data和methods。这样写起来会更加方便简洁。那么在底层,Vue2是如何实现this直接获取data和methods的呢? data 在Vue2中,当我…

    Vue 2023年5月28日
    00
  • Vue.set 全局操作简单示例

    Vue.set()方法是Vue.js提供的全局操作,用于给Vue实例动态添加属性,并保证新添加的属性能够响应式地触发视图更新。以下是一个关于Vue.set()的攻略: 简介 Vue.set()的语法如下: Vue.set(object, key, value) 其中: object:Vue实例的一个数据对象 key:新添加的键 value:新添加的键对应的值…

    Vue 2023年5月27日
    00
  • vue的ssr服务端渲染示例详解

    下面是关于“Vue的SSR服务端渲染示例详解”的完整攻略: 一、什么是Vue的SSR服务端渲染? Vue的SSR服务端渲染,全称Server-Side Rendering,是指将Vue组件在服务器端渲染成HTML字符串,然后直接发送给浏览器渲染。相比于传统的客户端渲染,SSR有以下优点: 对于SEO(搜索引擎优化)更加友好,因为搜索引擎爬虫可以直接获取到完整…

    Vue 2023年5月28日
    00
  • vue elementUI 表单校验功能之数组多层嵌套

    我将为您提供关于“vue elementUI 表单校验功能之数组多层嵌套”的完整攻略。 1. 前置知识 在学习“vue elementUI 表单校验功能之数组多层嵌套”前,需要掌握以下知识点: Vue.js基础使用方法 Vue组件和Props使用方法 ElementUI表单组件使用方法 2. 数组多层嵌套表单校验方法 默认情况下,ElementUI只针对表单…

    Vue 2023年5月29日
    00
  • vue的图片需要用require的方式进行引入问题

    为了解释“Vue 的图片需要用 require 的方式进行引入问题”,首先需要对 Webpack 打包工具的处理方式进行简要说明。 Webpack 打包工具通过使用 ‘loader’(加载器)的引入不同类型的文件,包括图片、CSS文件等。其中图片文件处理经常出现的问题就是路径引入的方式。Webpack 打包工具提供了多种处理方式,其中包含使用require的…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部