用Electron创建第一个桌面应用、打包并加密代码

参考教程:https://www.electronjs.org/docs/tutorial/quick-start
https://www.cnblogs.com/FHC1994/p/10055698.html
说明:官网这个快速入门教程真的写得超好,大大赞一个。

前提条件

在使用Electron进行开发之前,您需要安装 Node.js。 我们建议您使用最新的LTS版本。
注意:这里如果不装LTS版本会在后面的make步骤时候出问题,所以最好装LTS版,目前亲测ok的版本是node.js - v14.17.1 LTS.

请使用为你平台预构建的 Node.js 安装器来进行安装, 否则,您可能会遇到与不同开发工具不兼容的问题。

要检查 Node.js 是否正确安装,请在您的终端输入以下命令:

node -v
npm -v

这两个命令应输出了 Node.js 和 npm 的版本信息。

注意 因为 Electron 将 Node.js 嵌入到其二进制文件中,你应用运行时的 Node.js 版本与你系统中运行的 Node.js 版本无关。

创建应用程序

创建一个文件夹并初始化 npm 包

运行命令行:

mkdir my-electron-app && cd my-electron-app
npm init

init初始化命令会提示您在项目初始化配置中设置一些值 为本教程的目的,有几条规则需要遵循:

entry point 应为 main.js.
author 与 description 可为任意值,但对于应用打包是必填项。
你的 package.json 文件应该像这样:

	{
		  "name": "my-electron-app",
		  "version": "1.0.0",
		  "description": "Hello World!",
		  "main": "main.js",
		  "author": "Jane Doe",
		  "license": "MIT"
	}

将 electron 包安装到应用的开发依赖中

运行命令行:

npm install --save-dev electron

在package.json中增加electron启动命令

最后,您希望能够执行 Electron。 如下所示,在您的 package.json配置文件中的scripts字段下增加一条start命令:

{
“scripts”: {
“start”: “electron .”
}
}

测试开发模式打开应用

start命令能让您在开发模式下打开您的应用,命令行运行:

npm start

此时会报错,说找不到入口文件 main.js

创建文件

创建 main.js:

	// Modules to control application life and create native browser window
	const { app, BrowserWindow } = require('electron')
	const path = require('path')
	
	function createWindow () {
	  // Create the browser window.
	  const mainWindow = new BrowserWindow({
	    width: 800,
	    height: 600,
	    webPreferences: {
	      preload: path.join(__dirname, 'preload.js')
	    }
	  })
	
	  // and load the index.html of the app.
	  mainWindow.loadFile('index.html')
	
	  // Open the DevTools.
	  // mainWindow.webContents.openDevTools()
	}
	
	// This method will be called when Electron has finished
	// initialization and is ready to create browser windows.
	// 部分 API 在 ready 事件触发后才能使用。
	app.whenReady().then(() => {
	  createWindow()
	
	  app.on('activate', function () {
	    // On macOS it's common to re-create a window in the app when the
	    // dock icon is clicked and there are no other windows open.
	    if (BrowserWindow.getAllWindows().length === 0) createWindow()
	  })
	})
	
	// Quit when all windows are closed, except on macOS. There, it's common
	// for applications and their menu bar to stay active until the user quits
	// explicitly with Cmd + Q.
	app.on('window-all-closed', function () {
	  if (process.platform !== 'darwin') app.quit()
	})
	
	// In this file you can include the rest of your app's specific main process
	// code. 也可以拆分成几个文件,然后用 require 导入。

创建 index.html:





  
    
    
    
    
    Hello World!
  
  
    

Hello World!

We are using Node.js , Chromium , and Electron .

创建 preload.js:

// All of the Node.js APIs are available in the preload process.
// It has the same sandbox as a Chrome extension.
window.addEventListener('DOMContentLoaded', () => {
  const replaceText = (selector, text) => {
    const element = document.getElementById(selector)
    if (element) element.innerText = text
  }

  for (const dependency of ['chrome', 'node', 'electron']) {
    replaceText(`${dependency}-version`, process.versions[dependency])
  }
})

此时再运行命令行:npm start
会看到有一个窗口弹出,页面显示 node.js、chomium 等版本内容。

打包分发程序

最快捷的打包方式是使用 Electron Forge。

将 Electron Forge 添加到您应用的开发依赖中,并使用其"import"命令设置 Forge 的脚手架:

npm install --save-dev @electron-forge/cli
npx electron-forge import

执行成功后,会有如下反馈:

✔ Checking your system
✔ Initializing Git Repository
✔ Writing modified package.json file
✔ Installing dependencies
✔ Writing modified package.json file
✔ Fixing .gitignore

We have ATTEMPTED to convert your app to be in a format that electron-forge understands.

Thanks for using "electron-forge"!!!

使用 Forge 的 make 命令来创建可分发的应用程序:

npm run make

[email protected] make /my-electron-app
electron-forge make

执行成功后,会有如下提示:

✔ Checking your system
✔ Resolving Forge Config
We need to package your application before we can make it
✔ Preparing to Package Application for arch: x64
✔ Preparing native dependencies
✔ Packaging Application
Making for the following targets: zip
✔ Making for target: zip - On platform: darwin - For arch: x64

同时在源代码根目录的out文件夹下,会有两个文件夹:

my-electron-app-win32-x64
make

其中 make 文件夹下是安装程序,my-electron-app-win32-x64 文件夹下是可执行程序,双击 my-electron-app.exe 即可弹出我们上面写好的网页窗口。

加密代码

上面的程序打包后,可执行程序文件夹resources下面app里面还是有所有的源码文本文件,可以使用 electron 自带的代码加密工具对代码加密。步骤如下:

1.全局安装 asar
npm install asar -g

安装完asar以后,就可以使用asar命令将程序文件打包了。

2.在 resources 目录下使用 asar 指令进行加密
asar pack ./app app.asar

运行完成后,会发现resources下有一个文件:app.asar,就是 app 文件夹加密后生成的文件。此时可将文件夹 app 改名或删除,然后再运行上面编译好的可执行程序,会发现程序依然能够正常运行,说明无缝加密成功。

你可能感兴趣的:(前端,nodejs)