Electron入门(新建工程)

30 篇文章 0 订阅
6 篇文章 0 订阅

前言:

因为工作需要使用Electron做桌面应用程序,了解一下学习成本最低的只有Electron。直接结合Node.js + Vue.js 可以快速实现使用,当然了解的并不深入。这里做一下记录。

顺便吐槽一下遇到一个问题,就是Electron打包后会出现部分Node.js的node_modules库找不到,当然了也找到了解决方式。

Electron文档:https://www.electronjs.org/

Electron-builder文档:https://www.electron.build/

1.开始

1.1:创建一个Vue工程 (我用的Vue-cli3)

vue create project

1.2:安装Electron

//1.3步骤安装 electron-builder会自动完成。这里是我自己写的顺便带入参数的含义
vue add electron-builder

1.3:创建完工程在project/src 目录下创建 background.js 文件,并写入(这是Electron的主文件)

'use strict'

import { app, protocol, BrowserWindow, Menu, screen } from 'electron';
const isDevelopment = process.env.NODE_ENV !== 'production';
const path = require("path");

/*******************************************************************************/
let win; //windows父窗口   
/*******************************************************************************/
import {
	createProtocol
} from 'vue-cli-plugin-electron-builder/lib';
import installExtension, {
	VUEJS_DEVTOOLS
} from 'electron-devtools-installer';

///
//禁止开启多个应用程序  
const gotTheLock = app.requestSingleInstanceLock();
if (!gotTheLock) {
	app.quit();
}

//创建window主窗口  
function createWindow() {
	// Create the browser window.      
	win = new BrowserWindow({
		width: process.env.WEBPACK_DEV_SERVER_URL ? 1000 : 350, //窗口宽度    
		height: 600, //窗口高度           
		x: process.env.WEBPACK_DEV_SERVER_URL ? screen.getPrimaryDisplay().workAreaSize.width - 1000 : screen
			.getPrimaryDisplay().workAreaSize.width - 350, //设置窗口位置
		y: screen.getPrimaryDisplay().workAreaSize.height - 600, //设置窗口位置  
		icon: `${__static}/logo.ico`, //设置窗口左上角图标    
		frame: false, //无边框     
		resizable: false, //禁止窗口缩放       
		transparent: true, //窗口透明 * 只在打包未调试状态下有效
		skipTaskbar: true, //任务栏不显示窗口  
		acceptFirstMouse: true, //单击激活窗口
		webPreferences: {
			/* Use pluginOptions.nodeIntegration, leave this alone
			See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration
			for more info     
			nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION
			*/ 
			webSecurity: false, 
			nodeIntegration: true,
            contextIsolation: false,
			nativeWindowOpen: true,
			nodeIntegrationInWorker: true,
			enableRemoteModule: true
			// preload: path.join(__dirname, '../src/views/renderer.js'), //在加载其他脚本前,先执行此脚本,可使用Node.js API
		}
	})
	win.setResizable(false); //设置用户是否可以手动调整窗口大小。
	win.setMaximizable(false); //设置用户是否可以手动最大化窗口
	win.setSkipTaskbar(true); //窗口不显示任务栏 
	//	win.setProgressBar(0.5); //任务栏 进度显示 
	//	win.flashFrame(true); //任务栏窗口闪烁
	//	win.maximize();      
	if (process.env.WEBPACK_DEV_SERVER_URL) {
		// Load the url of the dev server if in development mode
		win.loadURL(process.env.WEBPACK_DEV_SERVER_URL); //编译环境下加载路径
		if (!process.env.IS_TEST) win.webContents.openDevTools(); //编译环境下开启调试
	} else {
		createProtocol('app');
		// win.webContents.openDevTools();
		// Load the index.html when not in development
		win.loadURL('app://./index.html'); //打包环境下加载路径
	}
	win.on('closed', () => {
		win = null;
	});
	
	win.once("ready-to-show", () => {
		// console.log(process.argv)
		// if (process.argv.indexOf("--openAsHidden") < 0)
		// 	win.show(); 
	});
	win.on("unresponsive", () => {
		console.log("程序无响应崩溃")
	})
}

// Scheme must be registered before the app is ready
protocol.registerSchemesAsPrivileged([{
	scheme: 'app',
	privileges: {
		secure: true,
		standard: true
	}
}])


// Quit when all windows are closed.
app.on('window-all-closed', () => {
	// On macOS it is common for applications and their menu bar
	// to stay active until the user quits explicitly with Cmd + Q
	if (process.platform !== 'darwin') {
		app.quit();
	}
})

app.on('activate', () => {
	// 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 (win === null) {
		//初始化WiFi模块     
		// Utils.init("ERR_INIT");     
		// //初始化消息通讯模块        
		// EventEmitter();         
	}
})


// This method will be called when Electron has finished   
// initialization and is ready to create browser windows.  
// Some APIs can only be used after this event occurs.     
app.on('ready', async () => {
	//创建Windows窗口    
	createWindow();
})


// Exit cleanly on request from parent process in development mode.
if (isDevelopment) {
	if (process.platform === 'win32') {
		process.on('message', (data) => {
			if (data === 'graceful-exit') {
				app.quit();
			}
		})
	} else {
		process.on('SIGTERM', () => {
			app.quit();
		})
	}
}


1.4:添加Vue-Router路由

cnpm install vue-router --save

1.5:修改main.js
 

import Vue from 'vue'
import App from './App.vue'

//添加
import router from './router'

Vue.config.productionTip = false

new Vue({
    router, //添加
    render: h => h(App),
}).$mount('#app')

 1.6:src目录下创建router文件夹并创建index.js文件写入:

import Vue from 'vue'
import Router from 'vue-router'
Vue.use(Router)


const originalPush = Router.prototype.push
//修改原型对象中的push方法
Router.prototype.push = function push(location) {
   return originalPush.call(this, location).catch(err => err)
}


export default new Router({
	// mode: 'history',
	mode: process.env.IS_ELECTRON ? 'hash' : 'history',
	base: process.env.BASE_URL,
	routes: [
		{
			path: '/',
			name: 'home',
			component: () =>import('@/views/home')
		}
	]
})

1.7:修改App.vue视图主文件。

<template>
  <div id="app">
    <div id="app">
    	<router-view></router-view>
    </div>
  </div>
</template>

<script>
export default {
  name: 'App',
  components: {
    
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>

2.完成

2.1:在管理员命令窗口执行

yarn electron:serve

下篇发布打包配置

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Electron 入门指的是学习如何使用 Electron 框架来开发跨平台的桌面应用程序。首先需要了解 Electron 的基本概念和架构,包括主进程和渲染进程、应用程序的生命周期等。然后需要学习如何使用 HTML、CSS 和 JavaScript 来开发界面和逻辑,并且掌握 Electron 提供的 API 来访问操作系统的底层功能,比如文件系统、网络、窗口管理等。最后需要了解如何打包和发布应用程序,以及如何调试和测试应用程序。 ### 回答2: Electron 是一个用于构建跨平台桌面应用程序的开源框架。它使用 HTML、CSS 和 JavaScript 来创建桌面应用程序,并且可以在不同的操作系统上运行,如 Windows、Mac 接来和 Linux。 学习 Electron 入门可以按照以下步骤进行: 1. 准备开发环境:首先要安装 Node.js 和 npm,它们用于安装 Electron。可以在官方网站上下载并安装最新版本的 Node.js。安装完成后,打开终端或命令提示符窗口,运行命令 `npm install -g electron` 安装 Electron。 2. 创建一个新项目:在合适的目录下创建一个新的文件夹作为项目文件夹。在终端或命令提示符中,切换到项目文件夹,并运行命令 `npm init` 创建一个新的 npm 项目。按照提示一步一步地填写项目信息。完成后,会生成一个 `package.json` 文件,用于管理项目依赖和配置。 3. 安装必要的依赖:现在,需要安装 Electron 的依赖。在终端或命令提示符中运行命令 `npm install electron --save-dev` 安装 Electron。 4. 编写主进程代码:在项目文件夹中创建一个新的 JavaScript 文件,作为 Electron 的主进程代码。主进程代码负责启动应用程序并管理窗口。 5. 编写页面代码:创建一个新的 HTML 文件,用于作为应用程序的主页面。 6. 运行 Electron:在终端或命令提示符中,切换到项目文件夹,并运行命令 `electron .` 启动应用程序。应用程序的窗口将会显示出来,同时运行主进程和页面代码。 通过上述步骤,可以快速入门 Electron,并开始构建跨平台桌面应用程序。可以通过学习 Electron 的文档、示例代码和社区资源深入了解和掌握 Electron 的更多特性和功能。 ### 回答3: electron是一种跨平台的开源桌面应用程序框架,可用于构建基于HTML、CSS和JavaScript的桌面应用程序。它通过将现代Web技术与Node.js的强大功能相结合,提供了一种简单而又强大的方式来开发可在Windows、Mac和Linux上运行的桌面应用程序。 要入门electron,首先需要安装electron的开发环境。可以通过npm(Node.js的包管理器)来安装所需的工具和依赖项。然后,创建一个新的electron项目,并安装electron所需的依赖包。接下来,可以使用任何常见的Web开发工具(如HTML、CSS和JavaScript)来进行应用程序的开发。 在electron中,应用程序的主进程由一个main.js文件来控制,而渲染进程由HTML和JavaScript文件来控制。通过main.js文件,可以创建一个主窗口并控制窗口的行为。在渲染进程中,可以使用Web技术来构建应用程序的用户界面,例如使用HTML构建页面结构,使用CSS样式化页面,使用JavaScript实现交互和动态效果。 electron还提供了许多API和功能,使开发者能够与底层操作系统进行交互,例如访问文件系统、显示原生对话框、打开外部链接等。此外,electron还支持构建可打包为独立安装包的应用程序,以便更方便地在不同操作系统上分发和部署应用程序。 总的来说,入门electron需要安装开发环境,创建项目,使用常见的Web技术进行开发,并利用electron提供的API和功能来构建强大的跨平台桌面应用程序。由于其简单易用的特点,electron已成为许多开发者喜爱的桌面应用程序开发框架之一。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值