素材巴巴 > 程序开发 >

Electron入门宝典(一)

程序开发 2023-09-09 12:15:02

目录

一.Electron介绍

 二.环境搭建

三.搭建electron项目(三种方式)

1.快速启动Demo

2.electron-forge

3.手动搭建

四.在开发工具中集成ESLint

五.Electron运行流程

 六.主进程和渲染进程

1.介绍

2.主进程和渲染进程使用Nodejs及Nodejs第三方模块

(1)主进程中使用Nodejs模块

(2)渲染进程中使用Nodejs模块

3.小实例

七.拖放打开文件功能


一.Electron介绍

 

 

 二.环境搭建

-g是全局安装

三.搭建electron项目(三种方式)

1.快速启动Demo

2.electron-forge

3.手动搭建

新建一个空文件夹,起一个项目名称,用vscode打开此文件夹,在此项目下创建index.html(渲染文件),main.js(主文件),然后在此路径下打开cmd,输入npm init --yes,在此目录下会自动生成package.json文件。

先确保已经像上面那样全局安装,再进行下面的本地安装(全局安装和局部安装的区别戳这里),如果不全局安装的话命令行不识别eletron命令!

然后在项目目录终端下安装electron(在这里安装是为了写electron代码有提示),输入

cnpm install electron --save-dev

编写主文件main.js,编写时注意,在electron中可直接引用nodejs的模块等。

项目结构:

index.html:


 
 Document
 
 

electron项目的渲染文件

1111

 main.js:

//主文件
 const {app,BrowserWindow}=require("electron");
 //引入nodejs的path模块,用于合并路径
 const path=require("path");//创建主窗口
 const createWindow=()=>{//创建主窗口const mainWindow=new BrowserWindow({width:600,height:400})//加载渲染文件(也可以使用loadURL加载远程渲染文件)mainWindow.loadFile(path.join(__dirname,"index.html"));
 }//监听应用的启动事件
 app.on("ready",createWindow);/*监听窗口关闭的事件,关闭的时候退出应用(macos除外)
 Macos中点击dock中的应用图标的时候重新创建窗口
 因为在mac中关闭窗口不会关闭应用程序,而是隐藏程序*/
 app.on("window-all-closed",()=>{//如果当前系统不是macOS,则关闭应用程序if(process.platform != "darwin"){app.quit();}
 })app.on("activate",()=>{if(BrowserWindow.getAllWindows().length===0){//重新创建一个窗口createWindow();}
 })

 base.css:

h1{color: red;
 }

运行文件,在项目目录下输入:

electron .

输出:

会显示一个窗口如下:

四.在开发工具中集成ESLint

下面的命令运行失败就以管理员身份打开cmd再次输入!

cnpm install -g eslint

然后在项目路径下输入

eslint --init

我执行完上面的操作之后 还是不起作用,所以我又安装了ESlint插件

完成之后即可对错误代码进行智能提示!        

但是有些提示不用去管,比如__dirname和process这种公共变量也会被下划线标出,但没有错。

五.Electron运行流程

先在package.json文件中找到main项,mian对应的文件就是入口文件,然后加载入口文件,即上面的main.js(名字是自己取的,要确保文件名和package.json中main所对应的文件名一致),然后执行入口文件时,会加载渲染文件,即上面例子中的index.html。

 六.主进程和渲染进程

1.介绍

在上面的项目目录下新建一个second.html,随便渲染点东西,比如:

second.html:


 
 Document
 
 

这是另一个渲染进程!

 main.js中新增一个窗口:

//创建窗口函数
 const createWindow=()=>{//创建主窗口const mainWindow=new BrowserWindow({width:800,height:400})//加载渲染文件(也可以使用loadURL加载远程渲染文件)mainWindow.loadFile(path.join(__dirname,"index.html"));//创建子窗口const secondWindow=new BrowserWindow({width:400,height:200,//此窗口的父窗口是mainWindowparent:mainWindow})//加载渲染文件(也可以使用loadURL加载远程渲染文件)secondWindow.loadFile(path.join(__dirname,"second.html"));
 }

输出:

2.主进程和渲染进程使用Nodejs及Nodejs第三方模块

(1)主进程中使用Nodejs模块

Electron主进程中无需任何配置就可以使用nodejs模块。

(2)渲染进程中使用Nodejs模块

方式一(preload方式):

即在主进程中通过preload加载过的文件可直接使用nodejs。

例如,在项目目录下创建render文件夹,在里面创建一个preload.js文件,然后在主进程文件中做如下修改,即可使preload.js直接使用nodejs。

preload.js:

const fs=require("fs");fs.readFile("./package.json",(err,data)=>{if(err){console.log(err);return;}console.log(data.toString());
 })

主文件main.js做如下修改:

添加一个webPreferences来加载渲染进程!

//创建窗口函数
 const createWindow=()=>{//创建主窗口const mainWindow=new BrowserWindow({width:800,height:400,webPreferences:{preload:path.join(__dirname,"renderer/preload.js")}})//加载渲染文件(也可以使用loadURL加载远程渲染文件)mainWindow.loadFile(path.join(__dirname,"index.html"));//主进程中直接使用nodejs模块即可//参数一是要读取的文件路径fs.readFile("package.json",(err,data)=>{if(err){console.log(err);return;}console.log(data.toString());})}

输出:

主进程的console输出可直接在终端查看,而渲染进程的输出需要在窗口下查看,View->Toggle Developer Tools,如下图,在Console那一栏可看到preload.js的输出。

如果不使用preload加载的js,Electron5.x 之后没法在渲染进程中直接使用nodejs,如果我们想在渲染进程中使用nodejs的话需要进行如下配置。

方式二(在index.html中引入):

示例:

在renderer文件下新创建一个renderer.js,内容和preload.js一致,在index.html中引入,

然后在主进程中添加两个配置参数,如下:

上面那个红框是配置的参数;下面那个红框是开启调试模式,自动展示Toggle Developer Tools窗口,方便查看结果,与使用nodejs配置无关。

3.小实例

先看看效果:

功能就是点击打开按钮,就会将package.json文件的内容输入到div框中。

index.html:


 
 Document
 
 

electron项目的渲染文件

base.css:

h1{color: red;
 }#text{width: 400px;height: 400px;border: 1px solid #666;
 }

然后功能实现是renderer.js实现的:

//渲染进程的第二种方法,这个文件在index.html文件里会引入const fs=require("fs");window.onload=()=>{buttonDom=document.querySelector("#button");textDom=document.querySelector("#text");buttonDom.onclick=()=>{fs.readFile("./package.json",(err,data)=>{if(err){console.log(err);return;}console.log(data.toString());textDom.innerHTML=data.toString();})}
 }

其他文件不变。

七.拖放打开文件功能

Electron调用h5的拖放api结合Nodejs fs模块实现拖放打开文件功能。

不只可以调用文本文件,也可以调用html等文件,会被直接解析出效果。

index.html:


 
 Document
 
 

base.css:

h1{color: red;
 }.content{width: 100%;height: 400px;background-color: orange;/* 当内容过多时,自动添加滚动条 */overflow: auto;
 }
 

renderer.js:

//渲染进程的第二种方法,这个文件在index.html文件里会引入const fs=require("fs");/**
 ondragenter.-.当被鼠标拖动的对象进入其容器范围内时触发此事件
 ondragover.-.当某被拖动的对象在另一对象容器范围内拖动时触发此事件
 ondragleave.-.当被鼠标拖动的对象离开其容器范围内时触发此事件
 ondrop.-.在一个拖动过程中,释放鼠标键时触发此事件*/
 window.onload=()=>{//获得div模块对象var contentDom=document.querySelector("#content");//阻止默认行为contentDom.ondragenter=contentDom.ondragover=contentDom.ondragleave=()=>{return false;}contentDom.ondrop=(e)=>{//console.log(e);//console.log(e.dataTransfer.files[0].path);//被拖拽文件的路径var path=e.dataTransfer.files[0].path;fs.readFile(path,(err,data)=>{if(err){console.log(err);return false;}contentDom.innerHTML=data;})}
 }

其他文件不变,效果自己试试吧。


标签:

上一篇: 4.jQuery修改元素的背景色 下一篇:
素材巴巴 Copyright © 2013-2021 http://www.sucaibaba.com/. Some Rights Reserved. 备案号:备案中。