VIte+Vue3 打包在FIle本地index.html打开项目(不需要起服务)

VIte+Vue3 打包在FIle本地 index.html 打开项目(不需要起服务)

参考原文链接:https://www.jianshu.com/p/41dc11b94c92,增加了一些问题处理。

一、安装插件

pnpm add @vitejs/plugin-legacy

二、配置 vite.config.js

import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';

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

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

三、路由配置(可选)
如果你配置了路由,history 选 createWebHashHistory() 即可。

import { createRouter, createWebHashHistory } from 'vue-router';
const router = createRouter({
  history: createWebHashHistory(),
  routes:[
		//...
	],
});
export default router;

四、修改打包后的 index.html
配置完前三个以后,就可以进行打包了。
下面的那两个报错,是因为缺少了插件。

报错:Cannot find module '@babel/preset-env'
安装:pnpm add @babel/preset-env
报错:terser not found. Since Vite v3, terser has become an optional dependency. You need to install it.
安装:pnpm add terser

打包完后在index.html文件里的 body元素的最后一行加入(必须是最后一行,不然不能在最后执行)

	<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>

全部都执行完,就可以使用了。

在浏览器环境中,使用 Node.js 的 fs 模块是不被允许的。因此,如果使用 Electron + Vite + Vue 开发应用程序,需要使用 Electron 提供的 API 来进行文件系统操作。 在 Electron 中,可以使用 Node.js 的 fs 模块,因为 Electron 应用程序是基于 Chromium 和 Node.js 构建的。如果需要Vue 中使用 Electron 的 fs 模块,可以通过 Vue 的插件机制来实现。 首先,在 Electron 主进程中添加一个模块来暴露 fs 对象: ```javascript // main.js const { app, BrowserWindow } = require('electron') const fs = require('fs') let mainWindow = null function createWindow() { mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true, contextIsolation: false, }, }) mainWindow.loadFile('index.html') mainWindow.on('closed', function () { mainWindow = null }) // 将 fs 模块暴露给 Vue 实例 mainWindow.fs = fs } app.on('ready', createWindow) app.on('window-all-closed', function () { if (process.platform !== 'darwin') { app.quit() } }) app.on('activate', function () { if (mainWindow === null) { createWindow() } }) ``` 然后,在 Vue 的插件中使用 fs 对象: ```javascript // fs-plugin.js export default { install: (Vue) => { Vue.prototype.$fs = window.require('electron').remote.getCurrentWindow().fs }, } ``` 最后,在 Vue 应用程序中使用插件即可: ```javascript // main.js import Vue from 'vue' import App from './App.vue' import fsPlugin from './plugins/fs-plugin' Vue.use(fsPlugin) new Vue({ render: (h) => h(App), }).$mount('#app') ``` 在 Vue 组件中,可以像这样使用 $fs 对象: ```javascript this.$fs.readFile('/path/to/file', (err, data) => { if (err) throw err console.log(data) }) ``` 需要注意的是,读取本地文件需要应用程序有相应的权限,可以在 package.json 文件中添加以下配置来获取权限: ```json { "name": "my-app", "version": "0.1.0", "main": "main.js", "scripts": { "start": "electron .", "postinstall": "electron-builder install-app-deps" }, "build": { "appId": "com.example.myapp", "productName": "My App", "directories": { "output": "dist_electron" }, "files": [ "dist/**/*", "main.js", "package.json" ], "extraResources": [ { "from": "assets", "to": "assets" } ], "dmg": { "contents": [ { "x": 110, "y": 150 }, { "x": 480, "y": 150, "type": "link", "path": "/Applications" } ] }, "mac": { "category": "public.app-category.developer-tools", "icon": "assets/icon.icns" }, "win": { "target": [ "nsis", "msi" ], "icon": "assets/icon.ico" }, "linux": { "category": "Development", "icon": "assets/icon.png" } }, "dependencies": { "electron": "^13.1.1" }, "devDependencies": { "@vue/cli-plugin-babel": "^4.5.0", "@vue/cli-plugin-eslint": "^4.5.0", "@vue/cli-service": "^4.5.0", "babel-eslint": "^10.1.0", "electron-builder": "^22.11.7", "eslint": "^6.7.2", "eslint-plugin-vue": "^6.2.2", "vue-template-compiler": "^2.6.11" }, "buildResources": "public" } ``` 在 package.json 文件中添加了 "buildResources": "public" 配置,表示将 public 目录下的文件打包到应用程序中。如果需要读取 public 目录下的文件,可以使用相对路径来访问。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值