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

news/2024/11/20 23:26:56/

序言

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 assetsnew 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 assetsnew 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 assetsnew 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.ppmy.cn/news/103476.html

相关文章

JavaEE进阶(5/29)SpringMVC

目录 1.复习 2.URL传参PathVariable 3.上传文件RequestPart 4.获取Cookie/Session/header 5.传统/维新获取cookies 6.传统/维信获得Header 7.获取Session&#xff08;非常重要&#xff09; 8.不加ResponseBody 9.如何获取Json数据&#xff0c;RequestBody 10.想…

cmake终极奥义

一、初识cmake cmake集中开源&#xff0c;跨平台&#xff0c;能够管理大型项目&#xff0c;简化编译构建过程和编译过程&#xff0c;高效率&#xff0c;可扩展于一体&#xff0c;简单而强大的项目构建工具 二&#xff0c;安装cmake 一般不需要安装&#xff0c;cmake目前已经成…

宿主启动插件中的BroadCastReceiver和ContentProvider

BroadcastReceiver插件化解决方案 静态广播和动态广播仅区别于注册方式的不同。静态广播的注册信息保存在PMS中&#xff0c;动态广播的注册信息保存在AMS中 发送广播&#xff0c;也就是Context的sendBroadcast方法&#xff0c;最终会调用ActivityManager.getService().broadca…

快速上手 SpringBoot 单元测试

✏️作者&#xff1a;银河罐头 &#x1f4cb;系列专栏&#xff1a;JavaEE &#x1f332;“种一棵树最好的时间是十年前&#xff0c;其次是现在” 目录 什么是单元测试&#xff1f;单元测试有哪些好处SpringBoot 单元测试使用单元测试的实现步骤生成单元测试类添加单元测试代码 …

LeetCode - 1049 最后一块石头的重量 II (0-1背包)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/130935119 LeetCode:1049. 最后一块石头的重量 II 题目:有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。 每一回合,从中选…

微服务架构之服务监控与追踪

与单体应用相比&#xff0c;在微服务架构下&#xff0c;一次用户调用会因为服务化拆分后&#xff0c;变成多个不同服务之间的相互调用&#xff0c;每个服务可能是由不同的团队开发&#xff0c;使用了不同的编程语言&#xff0c;还有可能部署在不同的机器上&#xff0c;分布在不…

MySQL主从复制(概念和作用、实战、常见问题和解决办法、扩展、GTID同步集群、集群扩容、半同步复制)

文章目录 1. 主从复制1.1 概念和作用1.2 主从复制的步骤1.3 搭建主从同步实战1.3.1 配置master主库1.3.2 配置slave从库1.3.3 MySQL主从复制监控和管理、测试1.3.4 主从复制的问题和解决方法 1.4 主从同步扩展1.4.1 主库同步与部分同步&#xff08;同步范围限制&#xff09;1.4…

第五次

1.总结变量的类型及含义 含义&#xff1a;顾名思义&#xff0c;变量就是程序设计语言中的一个可以变化的量&#xff0c;当然&#xff0c;可以变化的是变量的值。几乎所 有的程序设计语言中都有定义变量&#xff0c;并且其涵义也大同小异。从本质上讲&#xff0c;变量就是在程序…