vue项目有没有办法打包成exe单文件,并且可以操作其他文件?

如题,我有个vue项目,有没有办法打包成exe单文件呢?免安装直接运行的那种。
另外就是还要能操作其他文件,比如修改同目录或同目录的某个子目录下的文件内容。
如回答的好可以追加酬金,感谢。

需求
1、有没有办法打包成exe单文件呢?免安装直接运行的那种。
2、另外就是还要能操作其他文件,比如修改同目录或同目录的某个子目录下的文件内容。

答案

解答一

有的,electron可能是个比较好的解决方案。

通过使用 Electron,我们可以创建一个基于网站的桌面应用程序,并在最后添加 Electron 构建器,我们可以创建一个安装程序。这个桌面应用程序基于 Vue.js 应用程序,但它几乎可以是任何应用程序或网站。

先决条件

唯一的先决条件是应该安装https://nodejs.org/

Yarn 升级步骤是使用 Yarn 而不是 npm。如果你还没有安装 Yarn,那么使用下面的 npm 命令安装 Yarn(全局)。

npm install yarn --global

Vue CLI 如果您还没有安装 Vue CLI(全局),请运行以下命令。

yarn add global @vue/cli

创建一个 Vue.js 网站

要创建 Vue.js 网站,我们将使用 Vue CLI。通过使用该vue create命令,Vue.js CLI 会创建一个名为 的 Vue.js 应用程序my-vue-app。该--default选项使用 Vue.js 默认值跳过预设提示。

vue create my-vue-app --default --no-git

现在运行项目,执行以下操作,然后http://localhost:8080/在您喜欢的浏览器中打开地址。

cd my-vue-app
yarn serve

当一切都不好时,会显示 Vue.js 欢迎页面并显示消息Welcome to Your Vue.js App

创建电子应用程序

下一步是构建基于 Vue.js 应用程序的跨平台桌面应用程序。

yarn add electron使用命令安装电子。我们在本地安装它(--dev)。

yarn add electron --dev

在 Vue.js 项目的根目录中,我们创建一个main.js文件。请记住,此文件是在我们项目的根目录中创建的 ( /my-vue-app/main.js)。该main.js文件是我们应用程序的入口点内容。该main.js文件的内容如下所示。将内容复制/粘贴到main.js文件中。

const { app, BrowserWindow } = require('electron')

function createWindow () {
  const win = new BrowserWindow({
    width: 800,
    height: 600,
    webPreferences: {
      nodeIntegration: true
    }
  })

  win.loadFile('index.html') // this needs to be changed to './dist/index.html' for the my-vue-app
  win.webContents.openDevTools()
}

app.whenReady().then(createWindow)

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

app.on('activate', () => {
  if (BrowserWindow.getAllWindows().length === 0) {
    createWindow()
  }
})

设置入口点

win.loadFile('index.html')行指向错误的文件。默认情况下index.html设置为起始页。在为我们的 Vue.js 应用程序运行构建后,我们index.html位于./dist. 这意味着我们需要更改起始页。将线更改为以下以指向正确的位置。

win.loadFile('./dist/index.html')

易于查看的设置是添加 Vue.js 公共路径。此设置取决于您使用的构建环境。vue.config.js在项目的根目录中创建一个文件并设置公共路径。"./"注意和之间的区别"/"

module.exports = {
    publicPath: process.env.NODE_ENV === "production" ? "./" : "/"
}

我们需要修改package.json文件以指向我们的main.js文件。将主 json 元素添加到文件的根package.json目录。

{  "main": "main.js"}

设置开发命令

接下来将electron:dev元素添加到文件中的scripts元素package.json。使用此命令,可以调用 Yarn 来构建我们的 Vue.js 应用程序,然后调用 Electron 命令来构建和运行该应用程序。

{  "scripts": {      "electron:dev": "vue-cli-service build && electron ."  },}

运行开发命令

要测试一切是否正常,请使用electron:devYarn 命令。

Yarn electron:dev

显示电子窗口。可能与开发人员工具openen。默认情况下,可以通过从文件中删除该win.webContents.openDevTools()行来隐藏它。main.js

配置跨平台构建

要为 Windows、Linux 或 MacOS 打包和构建电子应用程序,我们需要一个名为electron-builder. 用 Yarn 安装它。

yarn add electron-builder --dev

打开package.json文件并将以下构建元素添加到文件的根目录。根据您的要求更改值。对于这个例子,我使用appIdmy.vue.app 并构建一个win(windows)可执行目标nsis(Nullsoft Scriptable Install System)。这意味着我将为我们的 my-vue-app 安装一个安装程序。要查看所有选项,请参阅https://www.electron.build/configuration/configuration#configuration

{  "build": {    "appId": "my.vue.app",    "win": {      "target": "nsis"    }  }}

将 dist 文件夹配置为构建资源

大部分被遗忘的部分花了一些时间让我弄清楚。构建 dist 文件夹时未打包,但 src 文件夹会打包。这是我们不想要的。要解决此问题,请package.json再次打开该元素并使用其他两个元素扩展该build元素,files然后directories. 第一个(文件)告诉构建包含与给定模式匹配的文件。第二个(目录)告诉我们要dist用作构建资源,并且我们希望将所有内容输出到release文件夹。

{
  "build": {
    "files": ["**/*", "dist/**/*"],
    "directories": {
      "buildResources": "dist",
      "output": "release"
    }
  }
}

设置可执行构建命令

要使用build配置,请修改package.json文件并将另一个元素添加到scripts.

{
  "scripts": {
    "electron:build": "vue-cli-service build --mode production && electron-builder build"
  }
}

electron:build现在让我们使用Yarn 命令构建我们的安装程序。

Yarn electron:build

运行应用程序

打开my-vue-app/release文件夹,Windows NSIS 安装程序调用my-vue-app Setup 0.1.0.exe. 您还可以通过打开my-vue-app/release/win-unpacked文件夹并运行my-vue-app.exe.

参考链接:


下面来回答第二个问题

解答二

关于vue,并没有找到合适的现成的第三方库的解决方案.
要相对文件进行操作,两个解决方法;
1、使用nodejs直接进行文件操作,
Node.js 提供一组类似 UNIX(POSIX)标准的文件操作API。 Node 导入文件系统模块(fs)语法如下所示:

var fs = require("fs")

通过这个第三方库,
可以实现具体的文件读取,文件修改,文件删除操作,
具体Demo代码可以参考这个
参考:

2、跟上一个问题提到的一样,
第二个方法还是调用后端的API
vue通过调用后端的API接口,通过传参,来对指定的文件夹进行指定的操作:修改删除或者其他操作。
后端接收vue传过来的参数,从而对指定的文件夹进行指定的操作:修改删除或者其他操作。
比如前端传的参数包括三个变量,一个文件名路径,另一个就是操作方法(如复制、删除或者修改等等),第三个作为前边操作方法的参数补充
这样就可以实现你所想要的操作。


如有问题及时沟通

可以参考如下链接实现
https://juejin.cn/post/6844903952228548621

https://juejin.cn/post/6844903863552573453

您好:可以看这篇文章:https://blog.csdn.net/m0_46183499/article/details/121231949

直接说没有吧, 上面说的 electron, 不合适的, 这个很麻烦, 我用过的, 我想你想打包出来想要很小吧, 你用 electron 打包,那怕你写一个 hello word都是上百MB的文件大小,可以优化变小,但很麻烦,并且这个打包出来是安装包,,要点击之后去安装;
你用 electron 文件的这些读写,是可以的, 但很麻烦的, 你要看很多文档, 恐怕还是英文的, 有可能还解决不了, 并不是网上随便找就能找到吧;

总之, web本身就不支持操作文件系统,所以其实这个和Vue没有关系, electron 就是一个用v8套的一个壳,所以可以用 electron 套网页,变成桌面应用

一定是使用electron,之前我记得有个electron做的开源项目可以只改一个在线的url地址就可以在启动桌面应用访问你的url,但看起来你需要自定义操作系统文件什么,还是建议你自己做一个electron容器

我找到个这个,node.js packer,看上去好像是能符合我的要求,不知道有人用过没,合不合适

可以考虑electron,我们公司也做了一个基于electron桌面应用,打完包后安装文件为57M的安装程序