electron打包前端为Windows、Linux、Mac可执行文件详细教程

  • Post author:
  • Post category:linux




1、检查是否安装了node

输入

node -v



npm -v

查看node和npm是否安装好,Windows下没有安装好的参考教程

《Windows下NodeJS安装与npm环境变量配置》

,如果是Linux项目参考教程

《linux安装nodejs》

安装完成后,可以把镜像换成淘宝的,之后下载一些东西速度会快一点,在命令行输入

npm install cnpm -g --registry=https://registry.npm.taobao.org

,全局安装cnpm。之后下载慢的话直接用

cnpm install

就可以了。



2、初始化项目&配置文件

以下教程以Windows为例,Linux和Mac基本类似。

本教程新建了一个HelloWorld的文件夹,在文件夹下面创建了一个index.html的网页文件。

在项目文件中打开cmd窗口,输入

npm init

,引导语都直接回车,先都默认,然后会在项目文件下面生成一个

package.json

文件。

打开package.json文件,将

name

修改为项目名,将

main

里面的值改为

main.js

,然后对

scripts

进行如下配置。

  "scripts": {
    "start": "electron .",
    "package-win": "electron-packager . HelloWorld --platform=win32 --electron-version=10.0.0 --arch=x64 --download.mirrorOptions.mirror=https://npm.taobao.org/mirrors/electron/ --asar --app-version=0.0.0 --build-version=0.0.0 --out=HelloWorld --overwrite --no-package-manager --ignore='(.git)' --icon=assets/img/logo.ico",
    "package-linux": "electron-packager . HelloWorld --platform=linux --electron-version=10.0.0 -no-sandbox --arch=x64 --download.mirrorOptions.mirror=https://npm.taobao.org/mirrors/electron/ --asar --app-version=0.0.0 --build-version=0.0.0 --out=HelloWorld --overwrite --no-package-manager --ignore='(.git)' --icon=assets/img/logo.png",
    "package-mac": "electron-packager . HelloWorld --platform=darwin --electron-version=10.0.0 --arch=x64 --download.mirrorOptions.mirror=https://npm.taobao.org/mirrors/electron/ --asar --app-version=0.0.0 --build-version=0.0.0 --out=HelloWorld --overwrite --no-package-manager --ignore='(.git)' --icon=assets/img/logo.ico"
  },



scripts

设置了四个参数,一个是不打包直接启动的

start

,其他三个参数是三个不同平台项目的打包。在运行命令的时候,如果是直接启动,就运行

npm start

,如果是打包,就运行

npm run package-win

自己选择对应的平台。

第一行第二个参数

HelloWorld

表示打包后文应用程序的名称


paltform

参数可以设置为

win32

,代表打包为Windows 系统的可执行文件,打包为.exe;设置为

linux

,代表打包为Linux系统的文件,但在Linux系统下面无法直接运行,需要进行后期的配置。设置为

darwin

,打包为Mac下面的应用程序。

out

参数为输出文件夹的名字,

icon

参数读取文件项目的logo图标,在项目中图标放在

assets/img

文件夹下面。然后在参数里面把镜像换成了淘宝镜像,这样打包速度会快很多,不然会等到猴年马月。



3、新建main.js

配置好上面的文件后,在项目的根目录下面新建一个

main.js

文件,需要写入的内容如下:

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

function createWindow() {
    // 创建浏览器窗口
    const win = new BrowserWindow({
        width: 750,
        height: 650,
        webPreferences: {
            nodeIntegration: true
        }
    })
    // 并且为你的应用加载index.html
    win.loadFile('index.html')

    Menu.setApplicationMenu(null) //取消菜单栏
    // 打开开发者工具
    // win.webContents.openDevTools()
}

// Electron会在初始化完成并且准备好创建浏览器窗口时调用这个方法
// 部分 API 在 ready 事件触发后才能使用。
app.whenReady().then(createWindow)

//当所有窗口都被关闭后退出
app.on('window-all-closed', () => {
    // 在 macOS 上,除非用户用 Cmd + Q 确定地退出,
    // 否则绝大部分应用及其菜单栏会保持激活。
    if (process.platform !== 'darwin') {
        app.quit()
    }
})

app.on('activate', () => {
    // 在macOS上,当单击dock图标并且没有其他窗口打开时,
    // 通常在应用程序中重新创建一个窗口。
    if (BrowserWindow.getAllWindows().length === 0) {
        createWindow()
    }
})



4、安装electron插件

把上面所有的都配置好之后,现在就可以开始安装相应的插件了。在项目根目录中打开cmd窗口,只在项目中安装

electron

,输入命令

npm install --save-dev electron

上面这个插件是可以将网页用于应用程序窗口打开的,打包的话还需要另外一个插件

electron-packager

,还是在当前命令窗口下,输入

npm install --save-dev electron-packager



5、打包运行

在打包之前可以先测试运行是否代码有错,在当前命令行输入

npm start

然后就会弹出一个窗口,这就是打包后你需要的应用程序界面。

在这里插入图片描述

如果出现了想要的界面,就一切OK了,但万一发现没有达到想要的效果,估计是报错了,那么怎么打开控制台呢。在上面的main.js文件里面,我把打开开发者工具那行代码给注释了,取消掉就可以看见控制台了,知道自己那些报错了。

然后就开始打包吧。在命令行窗口运行

npm run package-win

,等一下就可以在当前目录下面看见一个新的文件夹,就去找到exe文件就可以双击运行了。

如果要在Linux下面运行,在命令行窗口运行

npm run package-linux

,生成的文件和Windows下略有不同,但可执行文件名字都是一样的,都叫做

HelloWorld

,找到整个文件,在当前目录打开终端,如是普通用户的话就先给权限

chmod +x ./HelloWorld

,然后再运行

./HelloWorld

。如果弹出窗口,证明你成功了,但我在搞整个玩意的过程中,试了半天没成功,控制台都是报这样的错误

[5301:1201/103632.560608:FATAL:electron_main_delegate.cc(264)] Running as root without --no-sandbox is not supported. See https://crbug.com/638180.追踪与中断点陷阱 (核心已转储)

后来找到一篇博客,说是在后面加上

--no-sandbox

就可以,然后我就试了

./HelloWorld --no-sandbox

,果不其然,成功。

Mac下面的话小弟没测,因为qiu,各位大佬自行检测,有什么问题可以评论交流讨论。



6、其他的一些问题

上面的教程就实现了所有的打包,这个点是解决一些我在打包过程中遇到的一些问题。

第一个是打包过程中,如果引用了其他的一些js库或者文件,就比如引用jQuery的话,会在控制台报$不是一个功能,这是因为在打包的过程中路径出现了问题。只需要在入口html文件最开始的地方加上

<script>if (typeof module === 'object') {window.module = module; module = undefined;}</script>

这行代码就可以解决这个问题。



7、编译/反编译app.asar

打包后,electron将数据文件变成了asar格式的压缩文件,需要用node进行反编译,才可以得到所有的数据文件。在打包好的目录下面找到resources这个文件夹,打开就可以发现app.asar这个文件。

在resources目录下面打开cmd窗口,运行命令

npm install -g asar

,会在node全局安装使用。

然后执行命令

asar extract app.asar ./app

,就会把app.asar反编译到当前目录下面的app文件夹下面,然后打开app文件夹,找到data文件夹,下面就是后端返回的两个数据,head_data.js和ssh_data.js,如果后端需要替换数据,请按照相同的格式进行替换。

假如替换好数据后,就需要对app这个文件夹重新编译为app.asar,还是在resources文件夹下面运行cmd窗口,然后运行命令

asar pack app app.asar

就可以把之前的app.asar文件给替换,达到更换数据的效果。

**注意:**如果后端需要对数据文件进行更改,不需要每次都进行反编译,手动反编译一次,然后让后端替换data数据,执行编译这一步操作即可。



版权声明:本文为qq_42376617原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。