看惯了网上各种全家桶,各种X+Y+Z,今天我也来凑凑热闹,和大家一起聊一聊如何使用Webpack打包基于Electron+React开发的跨平台桌面应用。
Electron是一个结合Node.js和Chromium实现的跨平台桌面应用解决方案,提供了操作系统访问Api,并赋予普通HTML网页访问Node.js本地模块的能力。使得掌握传统HTML、CSS和JS等技术的前端开发工程师,可以轻松的开发本地桌面应用。由于Electron基于Node.js,而Node.js本身具备跨平台特性,因此基于Electron开发的桌面应用程序也具备很好的跨平台能力,可以很好的适配Windows、MacOS和Linux等操作系统。
Electron除了支持几乎全部的Node.js功能,还提供很多内置模块,这些模块大致可以分为三类:仅供主进程使用的主进程模块(如:app,ipcMain等)、仅供渲染进程使用的渲染进程模块(如:ipcRenderer等),以及可以同时供主进程和渲染进程引用的模块,我称之为公共模块(如:clipboard等)。
一个Electron应用的入口文件通常被命名为main.js,主要负责整个应用的生命周期管理,以及主进程任务的分发等。
123456789101112131415161718192021const { app, BrowserWindow } = require('electron');let win;const createWindow = () => { win = new BrowserWindow({width:800, height: 600}); const indexPageURL = `file://${__dirname}/index.html`;win.loadURL(indexPageURL); win.on('closed', () => { win = null; });}app.on('ready', createWindow);app.on('window-all-closed',() => { if (process.platform !== 'darwin') { app.quit(); }});app.on('activate', () => { if (!win) { createWindow(); }});
我们先来看一个最基础的Electron应用实例:
如前文所述,Electron是使用我们前端开发工程师所熟知的HTML、CSS和JS来开发桌面应用,自然我们就可以使用各种前端框架和打包工具来开发和管理我们的Electron应用,比如接下来即将讲述的Webpack+React。
现如今前端开发越来越趋向于单页应用,很多工具也都提供了打包单页应用的功能,特别是在移动端页面中,单页应用更是盛行。但是在Electron应用中却更适合选择比较传统的多页面模式。因为,在桌面应用中多以窗口的形态存在,每个窗口就对应一个完整的界面,而在Electron中,一个界面就可以对应一个HTML页面。
现在,我们来搭建一个Webpack+React多页面应用。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768const path = require('path');const htmlPlugin = require('html-webpack-plugin');const ExtractTextPlugin = require('mini-css-extract-plugin');const outputPath = path.resolve(__dirname, '../dist');module.exports = { entry: { index: path.resolve(__dirname, '../app/pages/index.js'), login:path.resolve(__dirname, '../app/pages/login.js') }, output: { path: outputPath, filename:'js/[name].js', chunkFilename: 'js/[name].bundle.js' }, module:{ rules: [{ test: /\.(js|jsx)$/, use: { loader: "babel-loader",options: { presets: ["es2015", "react", "stage-0"] } }, exclude:/node_modules/ }, { test: /\.(css|less)$/, use: [ { loader:ExtractTextPlugin.loader, options: { publicPath: outputPath + '/css' } },{loader: 'css-loader'}, {loader: 'less-loader'} ] },{ test: /\.(png|jpe?g|gif)/, use: [{ loader: 'url-loader',options: { limit: 8192, name: 'images/[name].[ext]', publicPath:outputPath } }] } ] }, plugins: [ new htmlPlugin({ title: 'Index',template: 'app/tpl.html', chunks: ['common', 'index'],chunksSortMode: 'manual', filename: 'index.html' }),ew htmlPlugin({ title: 'Login', template: 'app/tpl.html',chunks: ['common', 'login'], chunksSortMode: 'manual', filename: 'login.html' }), ew ExtractTextPlugin({ filename: "css/[name].css", chunkFilename: "css/[id].css" }) ]};
简单说明一下,为了使用一些最新的特性,而现在的浏览器内核并没有完全支持这些新特性,因此我们通常需要使用babel-loader来进行转义,让我们的新特性在现在的浏览器中可以正常运行。因此,我们需要安装babel、babel-loader、以及es2015、react以及stage-0等辅助插件。当然,兼容程度可以根据自己的情况设置,设置state-0/1/2/3都可以。
另外,为了更好的编写和维护CSS样式,我们通常会使用LESS、SCSS等预编译语言,而且为了尽量减小前端整体资源大小,通常我们还会对JS、CSS进行压缩,因此我们还需要:less-loader、css-loader、style-loader和mini-css-extract-plugin等插件。
最后就是处理我们在界面布局过程中使用到的图标、图片文件,因此再加上url-loader和file-loader,基本功能就完成了。
接下来,我们再把React和Electron整合起来,一个Webpack+Electron+React的基本应用模型就搭建好了。
首先要做的就是让Webpack打包配置支持Node.js模块,因为Node.js模块不存在于node_modules中,如果直接使用以上配置文件打包,会出现类似报错:
123456ERROR in ./node_modules/electron/index.jsModule not found: Error:Can't resolve 'fs' in '/Users/YS/Desktop/webpack-electron/node_modules/electron' @ ./node_modules/electron/index.js 1:9-22 @ ./app/components/Login/index.js @ ./app/pages/login.js ...
所幸,Webpack早就考虑到了此类问题,并且提供了target配置项,用于指定打包的目标应用类型。比如眼下我们要打包Electron应用,就需要将target设置为electron-renderer。
123module.exports = { target: 'electron-renderer'};
然后,便是要考虑开发环境与生产环境的区别,为这两种环境设置不同的模式。
最后我们将前面的内容整合起来,便可得出一个基础的Electron应用的开发模板。
功能实现:首页开发、详情页面开发、登录权限校验开发、列表页面开发。
功能实现:商品列表、商品详情、商家详情、评价页面、订单等。
功能实现:项目环境搭建、首页开发、地区选择功能开发、景点详情页面、订单购票功能等。
功能实现:数据库结构设计、后台商品基本信息的管理和文件上传、前台展示商品信息。
大数据直观显示,Web前端开发依然值得大家选择的职业,目前各个企业对于这块的人才稀缺量比较大,可以说这块是有市场的,和其他的行业相比它还没有达到饱和状态,所以说这方面的岗位也是很好就业的,不过,还是有很多的小伙伴到目前为止还没有听过这个岗位,甚至也不了解这个岗位是做什么的,以后的发展前景怎么样,薪资待遇怎么样?如今随着“互联网+”上升到*战略,软件行业与国民经济关系密,几乎绝大多数行业的发展都会促进软件行业的发展,因此,只要国民经济保持增长,软件行业就会增长,甚至当国民经济衰退时,也可以保持增长态势,所以说软件是可以做一辈子的行业...
课程主题:PC端网站布局、WebApp页面布局
实战项目: PC端项目:《东易买商城》《新浪积分商城》《拉勾网》《QQ音乐》《美乐乐商城》等;移动端webApp项目:《京东到家》 《优就业U学》;响应式项目:《青竹良品商城》。
培养目标:了解常用浏览器和浏览器内核; 了解语义化的概念; 掌握 HTML5 语法及使用技巧; 掌握 HTML5 常用标签。掌握 CSS 语法及使用技巧; 掌握 DIV CSS 布局方式; 掌握常见网页布局模式。掌握 Photoshop 切图以及插件切图; 能够熟练使用开发人员工具进行页面调试; 能够根据PSD文件*完成静态页面的开发工作。掌握 HTML5 新布局标签、多媒体标签; 掌握 CSS3 2D、3D 变换、动画效果; 能够使用CSS3新属性美化修饰网页; 了解移动端屏幕、移动端浏览器、操作系统的不同。掌握常用移动端调试方法; 掌握常用移动端适配方法; 掌握 CSS 预处理器 less 的使用; 掌握常用移动端框架使用方法; 掌握常见移动端页面开发; 掌握响应式布局开发; 掌握 Bootstrap 开发响应式页面; 掌握适配不同终端的网页开发技术选型。
立即咨询课程主题: JavaScript基础语法、JavaScript进阶、JavaScript高级编程、jQuery经典案例、项目答辩。
实战项目: JS部分案例及项目:《百度搜索页布局与交互》《优学登录页面布局与信息存储》《爱奇艺视频网站》;JQuery部分项目:《美乐乐商城交互效果》。
培养目标: 能够掌握 JavaScript 基本语法; 掌握常见 JavaScript 算法; 掌握 DOM 的各种操作; 熟练使用面向对象思想进行 DOM 编程; 掌握 JavaScript 的高级语法; 掌握 JavaScript 常见兼容性方案。*完成视频网站的页面搭建(包括 HTML结构、CSS样式、JavaScript 特效); 掌握应对业务编程的能力; 掌握团队合作开发流程。熟练使用 jQuery 操作 DOM; 熟练使用和编写 jQuery 案例。
立即咨询课程主题: ECMAScript 6、Webpack模块打包器、Node基础、Express框架、前端模块化、MongoDB、项目答辩。
实战项目: Node基础:《Node基础案例》《在线相册》、Node全栈项目:《及时聊天系统》《个人博客系统》。
培养目标: 了解ES6和JS的关系; 掌握ES6的基础用法和兼容性; 熟练掌握ES6的核心语法; 熟练使用ES6实现前端模块化开发。熟练使用Webpack模块打包器; 熟练掌握前端自动化工具; 能够建立客户端服务器交互模型,熟悉网络通信相关概念; 能够使用 Node.js 进行 Web 服务端开发; 能够掌握 JavaScript 异步编程模型; 能够掌握 JavaScript 模块化编程方式; 能够使用 Node.js 操作 MongoDB 数据库; 能够理解 HTTP 协议; 能够*开发基于后台接口的动态网站、Ajax 数据交互的项目; 能够*完成企业网站从前台到后台的基本开发工作。
立即咨询课程主题: 数据可视化、Vue、React、Angular、项目答辩。
实战项目: 数据可视化:《多变的统计图》《百度地图》;Vue:《vue基础实例》《洋网店微商城》《东易买后台管理系统》;React:《react基础实例》《仿简书APP》《淘车网》 ;Angular:《angular基础实例》《手机通讯录》。
培养目标: 掌握使用 D3.js 进行大数据可视化交互开发; 能够掌握使用 Vue 技术栈进行项目开发; 能够掌握使用 React 技术栈进行项目开发; 能够掌握源代码管理工具的使用; 能够熟练掌握前后端分离开发模式; 能够掌握使用主流框架开发门户网站、管理系统、移动 Web 等客户端; 能够掌握 Webpack 项目构建配置流程; 能够掌握 Web 项目的部署与发布模式; 能够掌握常见网站业务模块开发。掌握Angular常用的指令: 掌握如何定义和使用模块与组件: 掌握路由的配置。
立即咨询课程主题: 微信小程序、微信小游戏开发、React Native、项目答辩。
实战项目: 微信小程序:《仿网易云音乐》《优就业在线书城》;微信小游戏:《星际传奇》《飞机大战》;React Native:《优讯APP》《星座运势》。
培养目标: 能够掌握小程序的开发基础; 能够*开发小程序项目; 能够掌握 Canvas 的使用; 能够掌握小程序的部署与发布; 能够掌握小程序开发框架 mpvue 的使用; 掌握第三方 AI 平台的使用。能够掌握小游戏开发基础; 能够*开发小游戏项目; 能够掌握小游戏的部署与发布; 能够*使用 React Native 开发原生 App。
课程主题: 微信小程序、微信小游戏开发、React Native、项目答辩
培养目标: 从简历、面试技巧等层面助学员提升,培养学员沟通表达能力 让学员清晰了解职业发展规划,明确自身定位,找到适合自身发展的工作。
立即咨询为什么来火星学Web前端的女生更多?在其他培训机构,女生学程序的比例仅占20%, 但是在火星时代这个比例会上升到48%, 事实证明火星时代Web前端课程设置更科学合理, 讲师授课更深入浅出, 项目实训更能提升实战 能力, 0基础学员学习4个月就能胜任大前端工作。企业最需要的技术, 在这里都能学到。HTML5、交互、JS动效、Web APP轻应用,4项核心技能让你成为全栈式前端人才。大前端作为架构师级程序员,需要掌握产品的全局观。一款APP轻应用的全局开发, 让学员在实战中学习产品布局。
免费为您提供优质的机构
稍后会有专业老师给您回电,请保持电话畅通
易达招生网@版权所有 豫ICP备12014175号
本站文章由用户自行上传发布,如有侵权内容请及时联系我们删除。