Electron-Nodejs-Addon入门
为什么80%的码农都做不了架构师?>>>
1、本次学习使用Electron的版本是1.8.0,Nodejs的版本是7.9.0,操作系统为 Win10 x64,编译器为Microsoft VC++ 14
2、安装Node模块:node-gyp node-pre-gyp nan
3、编写代码如下:
//hello.cc
#include <node.h>
///#include "boost/array.hpp"
namespace demo {
using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::Object;
using v8::String;
using v8::Value;
using v8::Array;
using v8::Number;
void Method(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));
//boost::array<int,9> arr = {1,2,3,4,5,6,7,8,9};
//Local<Array> v8array = Array::New(isolate);
//for(int i = 0;i < 9;i++){
// v8array->Set(i,Number::New(isolate,arr[i]));
// }
// args.GetReturnValue().Set(v8array);
}
void init(Local<Object> exports) {
NODE_SET_METHOD(exports, "hello", Method);
}
NODE_MODULE(NODE_GYP_MODULE_NAME, init)
} // namespace demo
4、编写编译配置文件
//binding.gyp
{
"targets": [
{
"target_name": "hello",
"sources": [ "hello.cc" ],
"include_dirs":[
],
"libraries":[],
"link_settings":{
"libraries":[]
},
#"cflags!": [ "-fno-exceptions" ],
#"cflags": [ "-std=c++11" ],
#"cflags_cc!": [ "-fno-exceptions" ]
}
]
}
5、生成编译配置
在CMD里运行:
node-gyp configure --target=1.8.0 --arch=x64 --dist-url=https://atom.io/download/atom-shell
等待依赖文件下载完成,配置完成
6、编译代码
node-gyp build --target=1.8.0 --arch=x64
7、编写Electron启动代码
//main.js
const path = require('path')
const electron = require('electron')
const BrowserWindow = electron.BrowserWindow
const app = electron.app
const debug = true
if (process.mas) app.setName('Electron APIs')
var mainWindow = null
function initialize () {
var shouldQuit = makeSingleInstance()
if (shouldQuit) return app.quit()
// loadDemos()
function createWindow () {
var windowOptions = {
width: 1080,
minWidth: 680,
height: 840,
title: app.getName()
}
if (process.platform === 'linux') {
windowOptions.icon = path.join(__dirname, '/assets/app-icon/png/512.png')
}
mainWindow = new BrowserWindow(windowOptions)
mainWindow.loadURL(path.join('file://', __dirname, '/index.html'))
// Launch fullscreen with DevTools open, usage: npm run debug
if (debug) {
mainWindow.webContents.openDevTools()
mainWindow.maximize()
//require('devtron').install()
}
mainWindow.on('closed', function () {
mainWindow = null
})
}
app.on('ready', function () {
createWindow()
// autoUpdater.initialize()
})
app.on('window-all-closed', function () {
if (process.platform !== 'darwin') {
app.quit()
}
})
app.on('activate', function () {
if (mainWindow === null) {
createWindow()
}
})
}
// Make this app a single instance app.
//
// The main window will be restored and focused instead of a second window
// opened when a person attempts to launch a second instance.
//
// Returns true if the current version of the app should quit instead of
// launching.
function makeSingleInstance () {
if (process.mas) return false
return app.makeSingleInstance(function () {
if (mainWindow) {
if (mainWindow.isMinimized()) mainWindow.restore()
mainWindow.focus()
}
})
}
// Require each JS file in the main-process dir
//function loadDemos () {
// var files = glob.sync(path.join(__dirname, 'main-process/**/*.js'))
// files.forEach(function (file) {
// require(file)
// })
//autoUpdater.updateMenu()
//}
// Handle Squirrel on Windows startup events
switch (process.argv[1]) {
case '--squirrel-install':
//autoUpdater.createShortcut(function () { app.quit() })
break
case '--squirrel-uninstall':
//autoUpdater.removeShortcut(function () { app.quit() })
break
case '--squirrel-obsolete':
case '--squirrel-updated':
app.quit()
break
default:
initialize()
}
8、编写Electron页面代码
//index.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="./jquery-3.2.1.min.js"></script>
<script>if (typeof module === 'object') {window.jQuery = window.$ = module.exports;};</script>
<script>
var addon = require('./build/Release/hello')
$(document).ready(function(){
$('#test-addon-btn').click(function(){
console.log(addon.hello());
});
});
</script>
</head>
<body>
<button id="test-addon-btn">Test</button>
</div>
</body>
</html>
9、编写Electron运行的package.json文件
{
"name": "ElectronAddonHello",
"productName": "Electron Addon Demos",
"version": "1.3.0",
"description": "Electron Addon demos",
"private": true,
"main": "main.js",
"repository": "https://github.com/juxiangwu/electron-node-addons",
"keywords": [
"Electron",
"API",
"demo"
],
"author": "Jenson",
"license": "MIT",
"devDependencies": {
"chai": "^3.4.1",
"chai-as-promised": "^6.0.0",
"check-for-leaks": "^1.2.0",
"devtron": "^1.3.0",
"electron": "~1.6.2",
"electron-packager": "^8.6.0",
"electron-winstaller": "^2.2.0",
"husky": "^0.14.3",
"mocha": "^3.1.0",
"npm-run-all": "^4.0.2",
"request": "^2.70.0",
"rimraf": "^2.5.2",
"signcode": "^0.5.0",
"spectron": "~3.6.0",
"standard": "^8.2.0"
},
"dependencies": {
"electron-settings": "^3.0.7",
"electron-shortcut-normalizer": "^1.0.0",
"glob": "^7.1.0",
"highlight.js": "^9.3.0"
},
"standard": {
"env": {
"mocha": true
}
}
}
10、运行测试结果
转载于:https://my.oschina.net/wujux/blog/1560983
Electron-Nodejs-Addon入门相关推荐
- electron集成arm64架构的nodejs addon插件
随着macos M1芯片的发布,当前的electron PC应用要适配arm64架构(虽然低版本electron应用也可以在arm64架构上面运行(转译)但是这严重影响电脑性能). 环境搭建 mac上 ...
- 初探Electron,从入门到实践
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在开始之前,我想您一定会有这样的困惑:标题里的Electron 是什么?Electron能做什么?许多伟大的 ...
- 打造跳跃音波播音乐放器(Electron+Nodejs+React)
Electron可以让我们使用html,css,javascript来搭建跨平台(Windows.macOS.Linux)的桌面应用.下面通过Electron+Nodejs+React来实现一个支持播 ...
- 在nodejs addon 环境下抓视频和音频数据包
在node addon 环境下开发音视频,需要用到 gyp .这个配置比较简单,很快可以配置好.比较坑的是,在vscode 开发环境下, 如果装了conda 或者 mini conda . 有可能 ...
- 一个快速使用 Golang 开发和构建生成 NodeJS Addon 扩展的开发工具
GonaCli 一套快速使用 Golang 开发和构建生成 NodeJS Addon 扩展的开发工具 GONACLI 是一个快速使用 Golang 开发 NodeJS Addon 扩展的开发工具,开发 ...
- NodeJs基础入门
第0章 Node介绍 0.0 回顾 JavaScript **历史及发展 ** 1995年 网景公司的布兰登开发: 1997年7月,ECMA组织发布ECMAScript 1.0版; 2007年10月发 ...
- electron/nodejs实现调用golang函数
https://www.jianshu.com/p/a3be0d206d4c 思路 golang 支持编译成c shared library, 也就是系统中常见的.so(windows下是dll)后缀 ...
- html5 nodejs桌面开发工具,html5fromImages-nodejs生成器入门
最近有好多需求是把一堆图片,或者一张长图转成HTML文件在客户端展示,所以想尝试自动化这一过程,简单实验了一个HTML5生成器. 功能: 根据文件夹中图片文件生成简单HTML5展示页面 安装 $ np ...
- nodejs addon
nodejs和C++配合起来,又能满足前端的快速开发,也能达到核心层的性能要求. 之前也写过用C++写addon的例子.在实际使用过程也遇到了一些问题: 有些场景需要js注册回调函数,供底层调用,这个 ...
- NodeJS Addon开发
1.环境搭建 npm init npm i --save --dev node-gyp node-addon-api 在package.json中加入如下配置: 在package.json同级目录下创 ...
最新文章
- 树的高度从零还是一开始数_数据结构与算法之1——树与二叉树
- 远程计算机未能及时反应,Win10无法打开软件提示“服务器没有及时响应或控制请求”怎么办...
- eclipse创建多模块maven工程小结
- DIV布局的设置(水平或者垂直居中)
- Google开启全新图像目标检测大赛,场景多样性和复杂度史无前例
- 洛谷-神奇的幻方-NOIP2015提高组复赛
- Int.Parse()、Convert.toInt32()和(int)区别
- Java简单语法与访问权限修饰符
- 谈谈作为DBA我对MySQL数据库优化的理解
- 败走中国,是亚马逊们的宿命
- ElasticSearch系列——Kibana,核心概念
- 吴恩达团队盘点2019AI大势:自动驾驶寒冬、Deepfake已成魔
- 通过ssh访问docker容器的办法 亲测可行
- 新H3C服务器做RAID
- 总结近年来我国主、被动遥感卫星发射的情况
- python图片压缩算法_使用K均值算法进行图片压缩
- 输出前20个斐波纳列数列
- GnuTLS recv error (-54): Error in the pull function.
- 5个PS学习、练习素材网站
- linux 软件工具,Ubuntu 下常用的软件工具
热门文章
- 一文看懂BATH新基建:5G是基础,AI是内核
- 深度学习奠基人特伦斯:美国学界已经找到了解释人工智能“黑盒子”的方法...
- 超越“机器人三定律” 人工智能期待新伦理
- 谷歌大脑发布神经网络的「核磁共振」,并公开相关代码
- 谷歌放出AI平民化大招: 李飞飞宣布推出AutoML云平台,让普通企业也能用上深度学习
- 谷歌大脑最新研究:不用「训练」!高斯过程「超越」随机梯度下降
- 这年头,做 Python 不懂点数据结构与算法真不行!
- 后浪优秀!21 岁小伙兼职程序员养家,大三存款达 6 位数
- “我在苹果商店下载了一个诈骗 App,损失 60 万美金!”
- 高可用高性能负载均衡软件HAproxy详解指南-第三章:HAproxy实例