通常Vue3打包的项目只能放在web服务器里面,用 http://服务器地址 的方式运行,双击 index.html 是无法运行的。

如果要在本地运行,可以按照下面的步骤来实现。

首先,安装@vitejs/plugin-legacy:
npm i @vitejs/plugin-legacy --save

然后打开vite.config.js文件,加入如下配置:

import legacy from '@vitejs/plugin-legacy';

export default defineConfig({
  base:"./",
  plugins:[
    vue(),
    legacy({
      targets:["defaults","not IE 11"],
    })
  ]
});

然后,在项目打包完成后,运行下面的 nodejs 脚本:

const fs = require("fs");
const {JSDOM} = require("jsdom");

const dom = new JSDOM(fs.readFileSync("./dist/index.html"));

//删除包含type="module"的标签
var tags = dom.window.document.querySelectorAll("*[type=\"module\"]");
for(var i = 0 ; i < tags.length; i++){
    var tag = tags[i];
    tag.parentElement.removeChild(tag);
}

//需要把 script 标签里面的 nomodule,crossorigin 属性删掉
tags = dom.window.document.querySelectorAll("SCRIPT[nomodule]");
for(var i = 0 ; i < tags.length; i++){
    var tag = tags[i];
    tag.removeAttribute("nomodule");
}

tags = dom.window.document.querySelectorAll("SCRIPT[crossorigin]");
for(var i = 0 ; i < tags.length; i++){
    var tag = tags[i];
    tag.removeAttribute("crossorigin");
}

//data-src换成src
tags = dom.window.document.querySelectorAll("SCRIPT[data-src]");
for(var i = 0 ; i < tags.length; i++){
    var tag = tags[i];
    var src = tag.getAttribute("data-src");
    tag.removeAttribute("data-src");
    tag.setAttribute("src", src);
}

var html = "<!DOCTYPE html>\r\n" + dom.window.document.documentElement.outerHTML;
fs.writeFileSync("./dist/index.html", html);
console.log("成功修改dist/index.html");


Logo

前往低代码交流专区

更多推荐