首页 > 其他分享 >vue build index直接打开静态页面

vue build index直接打开静态页面

时间:2023-09-27 21:26:40浏览次数:25  
标签:index vue legacy script 标签 html let build

vite + vue3 打包的文件,如果使用类似于nginx或者其他的服务器打开,可以正常打开,但如果直接点击打开index.html文件,页面会白屏,打开调试工具后发现如下跨域的报错。

这是因为打包后并不支持file引用协议。这就给混合式开发等时候带来困扰,因为在这种场景下,是有需要直接打开index.html文件的需求的。
在经历一段时间的困扰后,还是找到了解决方案。

1.安装兼容插件 @vitejs/plugin-legacy

npm i  @vitejs/plugin-legacy

在vite.config.ts 中进行配置(可忽略)

// 引入@vitejs/plugin-legacy
import legacy from '@vitejs/plugin-legacy';
// 在plugins中添加
legacy({
  targets: ['defaults', 'not IE 11']
}),

2.手动修改打包完的index.html文件(不建议使用,可直接略过使用第三步)

先执行 npm run build 命令进行打包,打包完成后打开 dist/index.html。
将index.html中所有的 标签中的 type="module"、crossorigin、nomodule 删除。

举例
修改前
……
<script type="module" crossorigin src="./assets/index.5617d2f4.js"></script>
<script nomodule crossorigin id="vite-legacy-polyfill" src="./assets/polyfills-legacy.7fa4d18d.js"></script>
……
修改后
 <script src="./assets/index.5617d2f4.js"></script>
<script id="vite-legacy-polyfill" src="./assets/polyfills-legacy.7fa4d18d.js"></script>

3.自动修改打包完的index.html文件(建议使用)

在项目的根目录下的index.html文件中的尾部添加新的来处理,一定要添加在尾部。

<script>
  (function (win) {
    // 获取页面所有的 <script > 标签对象
    let scripts = document.getElementsByTagName('script')
    // 遍历标签
    for(let i = 0; i < scripts.length; i++) {
      // 提取单个<script > 标签对象
      let script = scripts[i]
      // 获取标签中的 src
      let url = script.getAttribute("src")
      // 获取标签中的 type
      let type = script.getAttribute("type")
      // 获取标签中的js代码
      let scriptText = script.innerHTML
      // 如果有引用地址或者 type 属性 为 "module" 则代表该标签需要更改
      if (url || type === "module") {
        // 创建一个新的标签对象
        let tag=document.createElement('script');
        // 设置src的引入
        tag.setAttribute('url',url);
        // 设置js代码
        tag.innerHTML = scriptText
        // 删除原先的标签
        script.remove()
        // 将标签添加到代码中
        document.getElementsByTagName('head')[0].appendChild(tag)
      }
    }
  })(window)
</script>

如上,就可以正常双击打开打包完的index.html运行项目了。

标签:index,vue,legacy,script,标签,html,let,build
From: https://www.cnblogs.com/cnblog16/p/17734342.html

相关文章

  • Vue3
    Vue3介绍 Vue3的变化1.性能的提升打包大小减少41%初次渲染快55%,更新渲染快133%内存减少54%2.源码的升级使用Proxy代替defineProperty实现响应式重写虚拟DOM的实现和Tree-Shaking(摇树--清除死代码进行优化)3.拥抱TypeScript Vue3可以更好的支持TypeScri......
  • Vue-router的使用、路由守卫、localStorage
    一、路由的使用以后,就是组件的切换实现页面切换的效果-----》必须借助于vue-router来实现。在App.vue中:<router-view/>--->显示组件--->在router/index.js中配置<router-link:to="about_url">---->做页面组件的跳转的基本使用:1.写一个页面组件2.......
  • Vuex的使用
    Vuex的使用在Vue中实现集中式状态管理的一个Vue插件,对Vue应用中多个组件的功效状态进行集中式的管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。使用步骤:1.新建store/index.js(可以随便命名) state中:存放数据mutations:当使用commit方法是会被触发actions:当使......
  • vue-day07
    vue-router使用以后用组件的切换来实现页面切换效果,必须借助于vue-router来实现vuex学过的:<router-view/>,显示组件,位置在router/index.js中配置,提供的<router-link:to="about_url">作业面跳转基本使用写一个页面组件配置访问某个路径显示这个页面组件路由跳转html......
  • 基于vue封装的Tag标签双击编辑单击选中可删除
    ......
  • 记录--Vue3 + Fabricjs 定制国庆专属头像
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助生在国旗下,长在春风里!国庆将至,采黎为大家带来定制头像2.0(国庆头像),让我们用代码的形式为祖国庆生!欢迎大家点赞收藏加关注哦前言想看效果或者想定制春节头像的小伙伴请直奔效果区域;想一睹定制头像2.0小工具的......
  • vue3项目结合antdesignvue封装form表单及校验
    效果图 完整代码1<scriptsetup>2import{defineProps,onMounted,reactive,ref,defineEmits}from'vue'3import{Card,Input,Select,DatePicker,FormItem,Form,Button}from'ant-design-vue'4import{useRuleChe......
  • Spring Jax-Ws. Build and consume Web Services – part 1
    SpringJax-Ws.BuildandconsumeWebServices–part 1Postedon July12,2012MarcoFollowingtheofficialguide,atthechapter19we’llfindtheSpringsupportaboutwebservice(honestly,coulditmiss?).InthisarticleI’lldescribethe......
  • vue3项目table表格动态表头生成+行数据合并
    这两处地方是动态的,由后端数据返回思路流程  1,后端返回数据二次处理  2,根据后端数据生成动态表头  3,利用antd的customRender与rowSpan设置行合并 完整代码<template><Table:data-source="dataSource":columns="columns":pagination="......
  • Vue3 - provide 提供的异步数据 inject 得到的数据 undefined 或 null
    如下所示,父组件(祖先组件)通过provide函数向所有后代组件传递prop。但是这两个Ref类型的数据最开始没有,需要等到onMounted初始化之后才有值。此时会遇到两个问题后代组件在setup函数中或者onBeforeMount等非常周期中调用,可能获取的是undefined或者null。传递响应式......