编写webpack插件修改vue打包后的index.html文件中配置文件静态资源引用

15 篇文章 0 订阅
订阅专栏

背景:
在vue项目中,有些时候会将一些配置文件放在static目录,有时候更新了项目之后,这些配置文件往往会出现前端的缓存,则想写一个插件,在打包后,对这些文件进行重命名修改。

插件编写逻辑:

const pluginName = 'RenameConfigFileWebpackPlugin';
const fs = require('fs');
const path = require('path')
const config = require("../config");

class RenameConfigFileWebpackPlugin {
  constructor(option) {
    this.configDirectoryName = option.configDirectoryName;
    this.indexFileName = option.indexFileName;
  }

  afterEmit(compilation,callback){
    let self = this;
    // let assets = compilation.assets;
    // let outputPath = compiler.outputPath;
    const assetsSubDirectory = path.join(config.build.assetsRoot, config.build.assetsSubDirectory,self.configDirectoryName);
    const indexHtmlPath = path.resolve(config.build.assetsRoot, self.indexFileName);
    // list all files in the directory
    let fileMapping = {};
    fs.readdir(assetsSubDirectory, (err, files) => {
      if (err) {
        callback(err)
      }
      files.forEach(file => {
        //获取文件的后缀名
        let fileSuffix = path.extname(file);
        let fileNewName = file.replace(fileSuffix,"") + "-" + new Date().getTime() + fileSuffix;
        fs.rename(path.resolve(assetsSubDirectory,file), path.resolve(assetsSubDirectory,fileNewName), err => {
          callback(err);
        })
        fileMapping[file] = fileNewName;
      });
    });
    fs.readFile(indexHtmlPath, "utf8", function (err, dataStr) {
      if (err) {
        callback(err)
      }
      Object.keys(fileMapping).forEach(ele => {
        if (dataStr.indexOf(ele) > -1) {
          dataStr = dataStr.replace(ele, fileMapping[ele]);
        }
      })
      fs.writeFile(indexHtmlPath, dataStr, function (err) {
        if (err) {
          callback(err);
        }
      })
    })
    callback()
  }
  apply(compiler) {
    let self = this;
    if (compiler.hooks) {
      //兼容webpack4
      let plugin = { name: pluginName };
      compiler.hooks.afterEmit.tap(plugin, (compilation,callback)=>{
        self.afterEmit.call(self,compilation,callback)
      });
    } else {
      //兼容webpack3
      compiler.plugin('after-emit', (compilation,callback)=>{
        self.afterEmit.call(self,compilation,callback)
      });
    }
  }
}

module.exports = RenameConfigFileWebpackPlugin;

插件引用使用,在webpack.prod.conf.js配置文件中配置刚写好的插件:

const RenameConfigFileWebpackPlugin = require('./RenameConfigFileWebpackPlugin')

new ConsoleLogOnBuildWebpackPlugin({
  configDirectoryName: 'config',
  indexFileName: 'index.html'
})

最后的成果:
在这里插入图片描述
总结:
在编写插件的时候要注意:

webpack4

在这里插入图片描述
在这里插入图片描述

webpackindex.html模板配置
yangyanqin2545的博客
01-06 2210
webpackIndex.html模板配置 1、单页面环境搭建 const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { mode:'development', plugin: [ new HtmlWebpackPlugin({ title:'多页面应用', template: './index.html'//模板 inject: 'body'//将生成的script标签应该放到什么
webpack】如何修改打包后的文件名称及输出目录
接着奏乐接着舞的博客
05-04 2717
首先监听webpack打包后的时机,而这个钩子函数是done.正常打包时将500.jsx文件打包到dist下的500文件夹下名称为index.html。于是,我先使用copySync方法复制一份index.html,复制后的文件叫50x.html,此时目录下有两个文件,我们再使用unlink删除index.html就完事了。比如:我想将下图的src目录下的500.jsx文件打包后输出到dist目录下500文件夹下名为50x.html.ps:我使用了setTimeout异步是因为copySync是异步的。
webpack打包index.html引用文件地址问题
最新发布
YUSIR 完美CODING世界
05-04 723
然而,当您在 HTML 文件直接引用资源文件时,使用的是相对于当前 HTML 页面的路径。自动在生成的 HTML 文件添加正确的资源路径。如果你在 HTML 文件使用了相对路径,浏览器会将这些路径解释为相对于当前 HTML 文件所在位置的路径。这样浏览器就会从网站的根目录开始解析路径,而不是相对于当前 HTML 文件的路径。属性指定的相对路径是相对于当前 HTML 文件的路径,而不是相对于网站的根目录。如果 HTML 文件位于网站的根目录,那么资源文件的路径就是相对于根目录下的。
webpack指南(基础篇)——手把手教你配置webpack
前端成长之路
03-04 752
今天我们来从零开始搭建一个项目,并实现用webpack打包和优化。
记一次 Vue CLI 项目修改打包资源输出目录
Cyj1414589221的博客
01-04 3600
某天同事在上架浙政钉应用的时候碰到个问题,Vue 项目打包默认输出资源路径的目录结构不符合上架要求...
随手笔记:vue public文件index.html全局引入js
weixin_45116920的博客
05-22 2825
所以我们可以采用 Vue CLI 的 变量,它是在Vue应用运行时动态生成的,可以用于自动计算出当前页面所在目录的绝对路径。在默认情况下,这个变量的值为"/",代表着应用的根路径。例如,在当前页面的URL路径为"/example/my-page"时,如果使用相对路径引入静态资源,可能会导致资源无法正确地加载。绝对路径通常是固定的,并不支持动态计算路径,而Vue CLI的变量正是为了避免这种问题而设计的。
vueindex.html引入静态文件不生效问题及解决方法
11-28
第二种可能出现的原因就是有单独的静态资源目录但是名字不叫static,这种的解决办法更改配置文件,把对应的几个配置文件内的static更改为你自己所创建的静态资源目录,由于网上大多教程所改的地方都不够完全,还是会...
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
10-16
主要介绍了webpack + vue 打包生成公共配置文件(域名) 方便动态修改,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
vue2 + webpack5相适配的 能成功打包的 package.json 文件
08-25
vue2 项目 + webpack 打包工具,是一个非常经典的组合,但是在配置的过程会老是出问题,例如:webpackwebpack-cli、vue-loader、vue-template-compiler、css-loader的版本的设定就是一个匹配的大问题;...
网站子目录部署VUE webpack 打包资源文件路径的正确引用方式1
08-03
似乎所有问题都解决了,但有个问题没有解决,就是如果我在css引了了图资源,webpack并不能很好的处理这的资源路径“m”件夹是站下的个录,如果我在开发的时候,
Vue基础知识总结 9:vue webpack打包原理
热门推荐
学Java,找哪吒
10-06 2万+
???? Java学习路线:搬砖工逆袭Java架构师 ???? 简介:Java领域优质创作者????、CSDN哪吒公众号作者✌ 、Java架构师奋斗者???? ???? 扫描主页左侧二维码,加入群聊,一起学习、一起进步 ???? 欢迎点赞 ???? 收藏 ⭐留言 ???? 一、前端模块化 webpack是让我们可以进行模块化开发,并且会帮助我们处理模块间的依赖关系。 并且不仅仅是JavaScript文件,还有CSS、图片、json文件等等,在webpack都可以被当做模块来使用。 二、打
04 webpack3配置从0到1搭建vue工程
qq_37550440的博客
07-15 521
从0到1搭建vue工程 precomit 不符合代码规范则无法提交代码
解决Vue项目打包后distindex.html用浏览器直接打开显示空白页的问题
青春木鱼的博客
07-14 1万+
三种方案解决Vue项目打包后distindex.html用浏览器无法直接打开的问题
静态html引入vue文件不生效,vueindex.html引入静态文件不生效问题及解决方法...
weixin_35589827的博客
07-08 3263
本文针对的是Vue小白,不喜勿喷,谢谢出现该问题的标志如下控制台warning(Resource interpreted as Stylesheet but transferred with MIME type text/html)出现的原因及解决办法第一种可能出现原因就是引入的静态文件在src文件夹内,这种的解决办法就是把资源引入静态资源的目录static第二种可能出现的原因就是有单独的静态资源...
webpack打包图片资源,图片不显示和index.htmlHtmlWebpackPlugin
weixin_45441173的博客
02-25 1059
webpack打包图片资源,图片不显示和index.htmlHtmlWebpackPlugin
三、webpack打包怎么指定index.html为网页模板
唐都恩了的博客
02-28 2294
打包后,把打包后的文件塞到html里面,并把结果放到webpack打包输出后的文件夹下面 怎么指定src下的html文件 1.安装webpackhtml插件 npm install html-webpack-plugin -D 详情见1与2注释 // webpack 是node写出来的 node的写法 let path = require('path'); // console.log(pat...
webpack-dev-server:静态资源目录配置
席木木的博客
01-17 5596
webpack-dev-server:静态资源目录配置
Vue3 项目修改index.html的 title
northcastle的博客
11-20 1455
vue3 项目修改index.html 的 title
webpack4 plugin 利用插件更改输出资源内容
qq_22936647的博客
07-11 707
插件 index.js: const pluginName = 'myTestPlugin'; class myTestPlugin { apply(compiler) { compiler.hooks.emit.tapAsync(pluginName, (compilation, cb) => { //可遍历出所有的资源名 for (var filename in compilation.assets) {
vue打包index.html空白
05-19
如果 Vue.js 应用程序在打包后的 `index.html` 文件没有任何内容,则可能是以下几个原因之一: 1. 检查 `publicPath` 配置项是否正确:在 `vue.config.js` 或 `webpack.config.js` 文件设置了错误的 `publicPath` 值会导致 `index.html` 文件无法正确加载应用程序的资源文件。确保 `publicPath` 的值正确设置为你的站点的根路径。 2. 确保构建过程没有出现错误:检查命令行或终端输出,看是否有任何错误消息。如果有,请修复错误并重新运行构建命令。 3. 检查是否正确引入资源文件:在 `index.html` 文件,确保正确引入了应用程序的所有资源文件(例如 `main.js`、`app.js`、`app.css` 等)。在浏览器的开发者工具查看网络面板,检查是否有任何资源文件加载失败或 404 错误。 4. 检查是否正确设置应用程序的根元素:在 `index.html` 文件,确保将 Vue.js 应用程序的根元素正确设置为 `id` 为 `app` 的元素。例如: ```html <div id="app"></div> ``` 如果以上方法都无法解决问题,请尝试使用浏览器的开发者工具调试应用程序以获取更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Ubuntu挂载iso文件和配置apt本地源 40789
  • MySQL同PostgreSQL + PostGIS对比 11799
  • SpringBoot | JPA基本查询及多条件查询,参数为空判断 9989
  • centos配置yum源 9621
  • ArcGIS For JavaScript API Switch Basemap(切换底图) 8023

分类专栏

  • GIS 10篇
  • 工具 12篇
  • 服务器 3篇
  • Cesium 10篇
  • Elasticsearch 1篇
  • spring cloud 4篇
  • 前端开发 15篇
  • javascript 10篇
  • arcgis 7篇
  • html+css 6篇
  • php
  • 数据库 15篇
  • C# 5篇
  • 总结 2篇
  • Java 7篇
  • Linux 21篇

最新评论

  • cesium实现自定义弹窗

    liuccn: 获取弹窗里面的的点击事件吗?这个就是一般的处理方法了。

  • cesium实现自定义弹窗

    2301_79079150: 用创建div的方式上图是不是不能添加事件获取实体了?应该怎么做呢

  • shp数据制作3DTiles白膜

    北梦木兮(zxt): line 的shapehao能转吗?

  • shp数据制作3DTiles白膜

    liuccn: 检查一下原始数据和操作步骤看是否有不一样的操作

  • shp数据制作3DTiles白膜

    再见南河: 为什么我的导出来是只有一个GLB文件和一个scenetree.json、一个tileset.json文件,而你的是b3dm文件,我的加载不出来呢?

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • leaflet 显示地图加载的瓦片的行列号
  • leaflet 叠加天地图经纬度瓦片绘制网格
  • VS Code搭建远程开发环境的几种情况
2024年4篇
2023年13篇
2022年37篇
2021年3篇
2020年4篇
2019年8篇
2018年1篇
2017年1篇
2016年1篇
2015年23篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

两个鬼故事腹黑是什么意思大发搬家送给宝宝起个好名字男金姓姑娘起名qq动画表情广告传播公司起名大全姓牛男宝宝起名的多元化公司怎么起名erp软件公司起名天野明免费英文起名网站兰因璧月公司起名网 周易备忘录格式健康管理公司起名字大全免费智能起名字大全歆字起名芭比仙子的秘密国语起名景个字一百分起名免费取名建筑公司取名劳务公司的起名给闺女起个个洋气点的小名快餐店名字大全起名网房开公司起名字大全海外刑警行动财富中文版ie浏览器打不开网页金宝宝起名大全软件八字取名起名大全在线中国地震带分布图少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

两个鬼故事 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化