Vue 脚手架(打包工具)的理解 - 配置文件理解

news2024/11/18 20:34:39

序言

Vue 脚手架是 Vue 作为一个前端开发项目的最核心点,将JavaScriptCSSHTML这几种前端自动整合,极大的简化了前端开发工作。

没有 Vue 脚手架,就没有 Vue ,这是一定的,Java 语言和C语言都需要编译,那么你可以将 Vue 脚手架看作是伪编译器吧,或者是伪解释器,当然伪解释器比较准确点。

个人理解

在笔者看来,Vue 项目有时会出现两个问题,一个是旧版本的 Vue 脚手架,一个是新版本的Vue 脚手架,笔者不太清楚哪些 Vue脚手架版本是算是旧版,还是新版,但是很明确的知道,部分Vue 项目的的确确会出现一种情况,那就是没有 public 目录的情况,当遇到这种情况,的确会出现额外的问题需要解决,问题在于 index.html 文件的放置问题,比如新版 Vue 脚手架正常情况下,index.html 文件都会在 Vue 项目创建时,便已被放置在 public 目录下,但是旧版 Vue 脚手架,却会直接将 index.html文件放置在 Vue 项目的根目录下,在我看来,有些不规范,对于强迫症而言,的确有些不舒服。

笔者尝试修改旧版 Vue 脚手架 index.html 路径问题思路如下:

  1. 修改 process.env.BASE_URL,但涉及源码比较深入,不宜操作,舍弃

  2. 关于开发环境和生产环境下的自定义 index.html 路径问题,但是打包时容易出错,无法正常打包,这一点看问题1 的报错,有解决方法。(推荐)

下面是笔者在无 public 目录情况下,遇到的 Vue 项目开发问题集锦。

如下问题出现的前提:Vue项目创建后,没有 public 目录的情况:

问题 1 新建 public 目录,修改其打包路径问题

(已解决,记录一下解决过程)

开发环境index.html文件路径配置

新建了 public 目录,并将 index.html 目录,移动到 public 目录内,并修改 webpack.dev.conf.js开发环境配置文件)文件内的 HtmlWebpackPlugin 配置,如下所示

在这里插入图片描述

 new HtmlWebpackPlugin({
      filename: 'index.html',
      template: './public/index.html',
      inject: true
    }),

成功在本地开发环境运行成功(cnpm run dev),并显示在本地浏览器上,在webpack.prod.conf.js 文件(生产环境配置文件)内设置了一样的配置。

当然笔者不保证是一样的配置路径,笔者这里的是相对路径配置,所以如果你打包时,会出现如下报错,那么仔细研究下,路径问题,到底是'./public/index.html'还是 '../public/index.html'

报错:

在这里插入图片描述

ERROR in   Error: Child compilation failed:
  Entry module not found: Error: Can't resolve 'E:\VueProject\public\index.html' in 'E:\VueProject\testproject':
  Error: Can't resolve 'E:\VueProject\public\index.html' in 'E:\VueProject\testpriject'

问题2 favicon 图标的放置问题

如果有 public 目录,那么正常情况下,我们都能将 favicon 图标放置在 public 目录下,当然这一点在 index.html 文件内需要我们配置好 favicon 的路径,如下:

<link rel="icon" href="<%= BASE_URL %>favicon.ico">

但是很遗憾,我们无法如此,会遇到报错 Vue Template execution failed: ReferenceError: BASE_URL is not defined

当然,我们也不用这么麻烦,只需要将 favicon.ico 的图标文件,放到 static 文件就行了,打包的时候,就不会出错了,当然,这里笔者的 index.html 配置如下所示:

<link rel="icon" href="<%= htmlWebpackPlugin.options.url %>/static/favicon.ico">

不是所谓的

<link rel="icon" href="<%= htmlWebpackPlugin.options.url %>favicon.ico">

当然,如果实在是强迫症的,想要将其图标文件放到 public 目录下,可以研究下 CopyWebpackPlugin 插件

在这里插入图片描述
该插件的作用在于,收集静态文件到指定的打包路径位置,所以应该可以打包 public 目录下的静态文件。如下解决问题2 参考链接4 02-02模块化作业

在这里插入图片描述

当然,上面只是启发,具体的实现是在 webpack.prod.conf.js 文件(生产环境配置文件),开发环境的配置也是如此(webpack.dev.conf.js

1、生产环境打包配置 webpack.prod.conf.js

(注意看是 config.build.assetsSubDirectory

// copy custom static assets
    new CopyWebpackPlugin([
      {
        from: path.resolve(__dirname, '../static'),
        to: config.build.assetsSubDirectory,
        ignore: ['.*']
      },
      {
        from: path.resolve(__dirname, '../public'),
        to: config.build.assetsSubDirectory,
        ignore: ['.*']
      }
    ])

笔者发现了一点不好的是,如果将 index.html 和 favicon.ico 文件放到 public 目录内,那么打包时,也会顺便把 index.html 复制两份,一份是在 Vue 打包的 dist 根目录下的,一份是在 static 目录内,有些冗余不规范且麻烦,要手动删除。
在这里插入图片描述

所以这里还需要配置一个忽略 index.html 的设置。如下:

// copy custom static assets
    new CopyWebpackPlugin([
      {
        from: path.resolve(__dirname, '../static'),
        to: config.build.assetsSubDirectory,
        ignore: ['.*']
      },
      {
        from: path.resolve(__dirname, '../public'),
        to: config.build.assetsSubDirectory,
        ignore: ['index.html']
      }
    ])

2、开发环境 webpack.dev.conf.js 配置:

(注意看是 config.dev.assetsSubDirectory

// copy custom static assets
    new CopyWebpackPlugin([
      {
        from: path.resolve(__dirname, '../static'),
        to: config.dev.assetsSubDirectory,
        ignore: ['.*']
      },
      {
        from: path.resolve(__dirname, '../public'),
        to: config.dev.assetsSubDirectory,
        ignore: ['index.html']
      }
    ])

关于自动清除上一次打包遗留的文件,我觉得不需要去专门安装 CleanWebpackPlugin,打包时(cnpm run buildcnpm run build:prod),Vue 脚手架会自动删除上一次的打包文件,所以完全没必要。

assetsPublicPath 按默认的就好,默认是 '/'

这里的 assetsPublicPath 配置关于 public 目录完全没有关联的,关联的是 URL前端的公共路径,所以有点误导人

在这里插入图片描述

解决问题2 参考链接

1. Vue Template execution failed: ReferenceError: BASE_URL is not defined

2. Template execution failed ReferenceError BASE_URL is not defined

3. Template execution failed: ReferenceError: BASE_URL is not defined

4. 02-02模块化作业

5. webpack入门(六)——html-webpack-plugin

6. vuecli3.0 htmlWebpackPlugin 报 ReferenceError: BASE_URL is not defined 错误

7. vue-cli脚手架项目中public和src/assets的区别

8. Vue CLI 3 public 目录没用吗

9. vue@cli3项目模板怎么使用public目录下的静态文件

10. vue项目中的public、static及指定不编译文件问题怎么解决

11. 我创建的项目里没有public文件

12. vue项目打包需要修改的路径问题

13. vue项目中引用public下面的文件

14. vue-cli2、vue-cli3脚手架详细讲解

对本问题2 无效的参考链接

1. vue项目设置浏览器icon图标

2. vue中添加favicon 图标 (3种方法)

3. 大白话Vue之publicPath

4. vue项目中配置favicon图标

5. vue项目添加favicon的几种方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/585461.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文阅读】Analyzing group-level emotion with global alignment kernel based approach

【论文阅读】Analyzing group-level emotion with global alignment kernel based approach 摘要1.介绍与相关工作2.方法3.实验 摘要 本篇博客参考IEEE于2022年收录的论文Analyzing group-level emotion with global alignment kernel based approach&#xff0c;对其主要内容…

new一个ObjectInputStream为什么会出现java.io.EOFException

一、举例代码 package com.softeem.wolf.homework06;import java.io.*;/*** Created by 苍狼* Time on 2023-05-24*/ public class App {public static void main(String[] args) throws IOException {ObjectInputStream ois null;ObjectOutputStream oos null;ois new Obj…

功率信号源的特点和用途是什么

功率信号源是一种电子测量仪器&#xff0c;它集信号发生器与功率放大器为一体&#xff0c;具有高电压、大功率的特点。在电子实验室中&#xff0c;功率信号源可以帮助用户驱动压电陶瓷、换能器以及电磁线圈等&#xff0c;有效地解决了驱动负载和放大功率的问题。下面我们来具体…

Linux:LAMP的架构与环境配置

这里写目录标题 一、LAMP1.1 LAMP是什么1.2 安装顺序 二、编译安装Apache httpd服务2.1 关闭防火墙&#xff0c;将安装Apache所需软件包传到/opt目录下2.2 安装环境依赖包2.3 配置软件模块2.4 编译及安装2.5 优化配置文件路径2.6 添加httpd系统服务2.7 修改httpd 服务配置文件2…

MySql基础学习(2)

MySql基础学习 一、函数1.1 字符串函数1.2 数值函数1.3 日期函数1.4 流程控制语句 二、约束2.1 约束基本分类2.2 外键约束2.3 删除/更新行为 三、多表查询3.1 多表关系3.2 多表查询概述3.3 多表查询分类3.3.1 内连接3.3.2 外连接3.3.3 连接查询-自连接 3.4 联合查询-union&…

[SpringBoot]xml写mapper

创建工程[SpringBoot框架]如何使用SpringBoot框架_万物更新_的博客-CSDN博客 实现步骤: 测试: <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd…

Visual Studio || Visual Studio Code 连接 SQL Server 和 mysql

使用Visua Studio链接本地SQL Server和服务器上的mysql。 软件版本&#xff1a; Visual Studio 2022&#xff1b;Visual Studio Code 2023&#xff1b;SQL Server 2019mysql8.0 一、软件准备二、连接SQL Server2.1 使用Visual Studio 连接SQL Server2.2 使用VS Code连接SQL Ser…

【qemu】将vmdk转换为img镜像教程

qemu软件下载地址&#xff1a; 64位下载地址&#xff1a;QEMU for Windows – Installers (64 bit) 32位下载地址&#xff1a;QEMU for Windows – Installers (32 bit) 找到qemu的目录&#xff0c;然后使用cmd打开&#xff08;qemu软件没有封装exe包&#xff0c;所以只能用…

伺服系统使用S曲线

在之前文章《S形曲线规划方式汇总》 介绍过贝塞尔曲线方式&#xff0c;并且在Marlin开源工程中也有贝塞尔曲线步进系统的实现方式。本篇介绍伺服系统中基于时间分割法实现的贝塞尔S曲线。 1 贝塞尔曲线路程规划 上文中推导过贝塞尔曲线&#xff0c;本文直接用结论&#xff1a…

分享一下如何使用echarts绘制散点图

文章目录 散点图源码地址 散点图 今天我来分享一下如何使用echarts绘制散点图 首先&#xff0c;我们需要引入echarts库。可以通过以下代码在HTML文件中引入&#xff1a; <script src"https://cdn.jsdelivr.net/npm/echarts5.2.0/dist/echarts.min.js"></s…

整合SSM(Spring + SpringMVC + Mybatis)

7、整合SSM 7.1、环境要求7.2、数据库环境7.3、基本环境搭建7.4、Mybatis层编写7.5、Spring层7.6、SpringMVC层7.7、小结及展望 7.1、环境要求 环境&#xff1a; IDEA MySQL 5.7.19 Tomcat 9 Maven 3.6 要求&#xff1a; 需要熟练掌握MySQL数据库&#xff0c;Spring&#…

FMT ICF5实时仿真,不止于飞控

基于ICF5的实时仿真 作为FMT的首款自研的国产开源飞控硬件平台&#xff0c;ICF5不仅功能强大&#xff0c;而且高颜值和高性价比获得了用户的一致好评。 FMT ICF5飞控 ICF5购买链接​item.taobao.com/item.htm?id705459383848&ali_refida3_430620_1006:1123834906:N:O3mc…

常见的主流自动化测试框架,这5种真的帮助巨大

今天我们要向大家介绍的是常见5种主流自动化测试框架&#xff0c;包括优缺点等内容&#xff0c;供大家参考学习。 1.ATF 自动化测试框架AutoTestFramework是B/S架构框架&#xff0c;可实现Selenium等多种自动化测试全流程、团队化管理的高级框架平台&#xff0c;通过集成自动化…

Zookeeper+消息队列Kafka

一、Zookeeper 概述 官方下载地址&#xff1a;Index of /dist/zookeeper 1.1 Zookeeper 定义 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 1.2 Zookeeper 工作机制 Zookeeper从设计模式角度来理解&#xff1a;是一个基于观察者模式设…

PyCharm配置Opencv(多人亲测可用)

23/5/29更新&#xff1a; 之前由于只安装opencv-python-contrib这个包&#xff0c;导致Opencv版本过高&#xff0c;有些算法无法使用&#xff0c; 所以这里更新安装opencv-contrib-python这个包&#xff0c;具体如下配置。 ————————————————————————…

【C++】map和set的使用及其模拟实现

文章目录 一、map和set的使用1. 关联式容器2. 键值对3. 关联式容器的使用3.1 set3.2 multiset3.3 map3.4 multimap 二、map和set的模拟实现1. 红黑树的实现(封装map和set版本)1.1 节点的实现1.2 KeyOfT(仿函数)1.3 红黑树的插入Insert1.4 迭代器iterator 2. set的模拟实现3. ma…

【分布式】分片存储服务器

完成了配置路由服务器之后&#xff0c;我们来到了对存储服务器的重构 在我们加入配置服务器组之后&#xff0c;我们发现我们的kvserver&#xff0c;也就是存储服务器还是单点的&#xff1a; 同样&#xff0c;我们可以借助之前实现的raft对单点进行拓展&#xff0c;我们可以设置…

【LeetCode热题100】打卡第7天:盛最多水的容器

文章目录 盛最多水的容器⛅前言&#x1f512;题目&#x1f511;题解 盛最多水的容器 ⛅前言 大家好&#xff0c;我是知识汲取者&#xff0c;欢迎来到我的LeetCode热题100刷题专栏&#xff01; 精选 100 道力扣&#xff08;LeetCode&#xff09;上最热门的题目&#xff0c;适合…

自制Arduino 风格开发板 - HK32F030MF4P6 紧凑开发板

模仿Arduino Nano 做一个HK32F030M 的紧凑开发板&#xff0c;排针间距和Arduino Nano 相同&#xff0c;整体尺寸略小&#xff0c;适合插在面包板上。兼容HK32F030MF4P6 和0301M&#xff0c;板载CH340N 串口和DS1307 时钟模块。开源工程地址&#xff1a;HK32F030MF4P6 紧凑开发板…

Python学习36:文本分析与加密

类型&#xff1a;字符串‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 描述‪‬‪…