[Vue CLI 3] 配置解析之 indexPath
在 vue.config.js 配置中有一个 indexPath 的配置,我们先看看它有什么用?
用来
指定 index.html 最终生成的路径(相对于 outputDir)
先看看它的默认值:在文件 @vue/cli-service/lib/options.js 中
indexPath: joi.string()
默认值:
indexPath: 'index.html'
使用案例:
我们在 vue.config.js 中配置:
indexPath: '1/2/3/b.html'
最终在编译之后的目录 dist(默认)下面会生成:
1/2/3/b.html 的文件,内部不会发生变化
我们看一下背后的实现:@vue/cli-service/lib/config/app.js 文件中
两层判断:
1、先判断是不会 product 环境
const isProd = process.env.NODE_ENV === 'production'
if (isProd) {}
2、是否配置了 indexPath
if (options.indexPath !== 'index.html') {
}
通过内置的插件去修改路径,插件文件在 cli-service/lib/webpack/MovePlugin.js
webpackConfig
.plugin('move-index')
.use(require('../webpack/MovePlugin'), [
path.resolve(outputDir, 'index.html'),
path.resolve(outputDir, options.indexPath)
])
这个对应的配置,默认的编译之后的目录是 dist,传入了 2 个路径:
/* config.plugin('move-index') */
new MovePlugin(
'/Users/***/dist/index.html',
'/Users/***/dist/1/2/3/b.html'
)
我们看一下 webpack 4 下的插件是如何编写的:
1、它是 class 的方式:
内部包含了 constructor 和 apply(参数是 compiler)
module.exports = class MovePlugin {
constructor () {}
apply (compiler) {}
}
2、constructor 里面其实要处理传入的参数:
constructor (from, to) {
this.from = from
this.to = to
}
定义了一个 from,一个 to,然后其实就是把 from 通过 fs 的 moveSync 函数移动到 to 里面:
这里我们依赖了工具包:fs-extra
const fs = require('fs-extra')
具体流程如下:先判断 from 的路径是否存在
if (fs.existsSync(this.from)) {
fs.moveSync(this.from, this.to, { overwrite: true })
}
3、apply 内部的结构呢
compiler.hooks.done.tap('move-plugin', () => {
// ...
})
通过 compiler tap 来注册插件,这里的 done 是一个生命周期的钩子函数:编译完成
compiler.hooks.someHook.tap()
这里还有其他钩子:
- run
- beforeRun
- compile
- beforeCompile
- afterCompile
- emit
- afterEmit
来源:https://segmentfault.com/a/1190000016267660
[Vue CLI 3] 配置解析之 indexPath的更多相关文章
- [Vue CLI 3] 配置解析之 parallel
官方文档中介绍过在 vue.config.js 文件中可以配置 parallel,作用如下: 是否为 Babel 或 TypeScript 使用 thread-loader. 该选项在系统的 CPU ...
- [Vue CLI 3] 配置解析之 css.extract
大家还记得我们在老版本中,对于线上环境配置中会把所有的 css 多打成一个文件: 核心是使用了插件 extract-text-webpack-plugin,方式如下: 第一步都是加载插件 const ...
- @vue/cli的配置知道多少-publicPath,outputDir,assetsDir,indexPath,filenameHashing,configureWebpack,productionSourceMap
vue.config.js的简单介绍 vue.config.js 是一个可选的配置文件, 在项目的 (和 package.json 同级的) 根目录中存在这个文件. 默认情况没有这个文件需要我们手动去 ...
- Vue CLI 3 配置兼容IE10
最近做了一个基于Vue的项目,需要兼容IE浏览器,目前实现了打包后可以在IE10以上运行,但是还不支持在运行时兼容IE10及以上. 安装依赖 yarn add --dev @babel/polyfil ...
- [Vue CLI 3] 配置 webpack-bundle-analyzer 插件
首先还是简单介绍一下 webpack-bundle-analyzer 是做什么的: Visualize size of webpack output files with an interactive ...
- Vue CLI 3.0脚手架如何在本地配置mock数据
前后端分离的开发模式已经是目前前端的主流模式,至于为什么会前后端分离的开发我们就不做过多的阐述,既然是前后端分离的模式开发肯定是离不开前端的数据模拟阶段. 我们在开发的过程中,由于后台接口的没有完成或 ...
- vue cli 3 lintOnSave 配置有时无效问题
一个使用vue cli 3.2创建的项目,创建时未开启 lintOnSave,后来希望开启并设置为 lintOnSave: 'error',但配置不生效. 解决方法1:新创建项目(此时vue cli ...
- 使用 vue-cli-service inspect 来查看一个 Vue CLI 3 项目的 webpack 配置信息(包括:development、production)
使用 vue-cli-service inspect 来查看一个 Vue CLI 3 项目的 webpack 配置信息(包括:development.production) --mode 指定环境模式 ...
- @vue/cli 3.x项目脚手架 webpack 配置
@vue/cli 是一个基于 Vue.js 进行快速开发的完整系统. @vue/cli 基于node服务 需要8.9以上版本 可以使用 nvm等工具来控制node版本 构建于 webpack ...
随机推荐
- js 引入Vue.js实现vue效果
拆分组件为单个js见:https://www.jianshu.com/p/2f0335818ceb 效果 html <!DOCTYPE html> <html> <hea ...
- day45作业
利用 html + css 写一个最基本的页面 <!DOCTYPE html> <html lang="en"> <head> <meta ...
- html特殊字符 编码css3 content:"特殊符号"一览
工作中经常会用到用纯css3美化复选框 <div class="cross"></div> css代码.cross{ width: 20px; height ...
- SQLServer-SQLServer2017:安装 SQL Server 的硬件和软件要求
ylbtech-SQLServer-SQLServer2017:安装 SQL Server 的硬件和软件要求 1.返回顶部 1. 安装 SQL Server 的硬件和软件要求 2018/11/06 适 ...
- 左神算法书籍《程序员代码面试指南》——2_03删除链表的中间节点和a/b处的节点
[题目]给定链表的头节点head,实现删除链表的中间节点的函数.例如:不删除任何节点:1->2,删除节点1:1->2->3,删除节点2:1->2->3->4,删除节 ...
- Vuejs实战项目:登陆页面
1.在view文件夹下创建login文件夹,创建index.vue:代表登录的组件 配置router.js,导入登录组件 import Vue from "vue"; import ...
- jmeter断言步骤
在POST /wordpress/wp-login.php请求,也就是名称为submit login form user的请求上点右键, 选择添加 -> 后置处理器 -> CSS/JQue ...
- Leetcode151. Reverse Words in a String翻转字符串里的单词
给定一个字符串,逐个翻转字符串中的每个单词. 示例: 输入: "the sky is blue", 输出: "blue is sky the". 说明: 无空格 ...
- 如何在vue项目中使用md5.js及base64.js
一.在项目根目录下安装 npm install --save js-base64 npm install --save js-md5 二.在项目文件中引入 import md5 from 'js-md ...
- Redis源码解析:19Hiredis异步API代码解析
Hiredis中的异步API函数需要与事件库(libevent,libev, ev)一起工作.因为事件循环的机制,异步环境中的命令是自动管道化的.因为命令是异步发送的,因此发送命令时,必要情况下,需要 ...