为什么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入门相关推荐

  1. electron集成arm64架构的nodejs addon插件

    随着macos M1芯片的发布,当前的electron PC应用要适配arm64架构(虽然低版本electron应用也可以在arm64架构上面运行(转译)但是这严重影响电脑性能). 环境搭建 mac上 ...

  2. 初探Electron,从入门到实践

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在开始之前,我想您一定会有这样的困惑:标题里的Electron 是什么?Electron能做什么?许多伟大的 ...

  3. 打造跳跃音波播音乐放器(Electron+Nodejs+React)

    Electron可以让我们使用html,css,javascript来搭建跨平台(Windows.macOS.Linux)的桌面应用.下面通过Electron+Nodejs+React来实现一个支持播 ...

  4. 在nodejs addon 环境下抓视频和音频数据包

    在node addon 环境下开发音视频,需要用到 gyp .这个配置比较简单,很快可以配置好.比较坑的是,在vscode 开发环境下, 如果装了conda 或者 mini conda .   有可能 ...

  5. 一个快速使用 Golang 开发和构建生成 NodeJS Addon 扩展的开发工具

    GonaCli 一套快速使用 Golang 开发和构建生成 NodeJS Addon 扩展的开发工具 GONACLI 是一个快速使用 Golang 开发 NodeJS Addon 扩展的开发工具,开发 ...

  6. NodeJs基础入门

    第0章 Node介绍 0.0 回顾 JavaScript **历史及发展 ** 1995年 网景公司的布兰登开发: 1997年7月,ECMA组织发布ECMAScript 1.0版; 2007年10月发 ...

  7. electron/nodejs实现调用golang函数

    https://www.jianshu.com/p/a3be0d206d4c 思路 golang 支持编译成c shared library, 也就是系统中常见的.so(windows下是dll)后缀 ...

  8. html5 nodejs桌面开发工具,html5fromImages-nodejs生成器入门

    最近有好多需求是把一堆图片,或者一张长图转成HTML文件在客户端展示,所以想尝试自动化这一过程,简单实验了一个HTML5生成器. 功能: 根据文件夹中图片文件生成简单HTML5展示页面 安装 $ np ...

  9. nodejs addon

    nodejs和C++配合起来,又能满足前端的快速开发,也能达到核心层的性能要求. 之前也写过用C++写addon的例子.在实际使用过程也遇到了一些问题: 有些场景需要js注册回调函数,供底层调用,这个 ...

  10. NodeJS Addon开发

    1.环境搭建 npm init npm i --save --dev node-gyp node-addon-api 在package.json中加入如下配置: 在package.json同级目录下创 ...

最新文章

  1. 树的高度从零还是一开始数_数据结构与算法之1——树与二叉树
  2. 远程计算机未能及时反应,Win10无法打开软件提示“服务器没有及时响应或控制请求”怎么办...
  3. eclipse创建多模块maven工程小结
  4. DIV布局的设置(水平或者垂直居中)
  5. Google开启全新图像目标检测大赛,场景多样性和复杂度史无前例
  6. 洛谷-神奇的幻方-NOIP2015提高组复赛
  7. Int.Parse()、Convert.toInt32()和(int)区别
  8. Java简单语法与访问权限修饰符
  9. 谈谈作为DBA我对MySQL数据库优化的理解
  10. 败走中国,是亚马逊们的宿命
  11. ElasticSearch系列——Kibana,核心概念
  12. 吴恩达团队盘点2019AI大势:自动驾驶寒冬、Deepfake已成魔
  13. 通过ssh访问docker容器的办法 亲测可行
  14. 新H3C服务器做RAID
  15. 总结近年来我国主、被动遥感卫星发射的情况
  16. python图片压缩算法_使用K均值算法进行图片压缩
  17. 输出前20个斐波纳列数列
  18. GnuTLS recv error (-54): Error in the pull function.
  19. 5个PS学习、练习素材网站
  20. linux 软件工具,Ubuntu 下常用的软件工具

热门文章

  1. 一文看懂BATH新基建:5G是基础,AI是内核
  2. 深度学习奠基人特伦斯:美国学界已经找到了解释人工智能“黑盒子”的方法...
  3. 超越“机器人三定律” 人工智能期待新伦理
  4. 谷歌大脑发布神经网络的「核磁共振」,并公开相关代码
  5. 谷歌放出AI平民化大招: 李飞飞宣布推出AutoML云平台,让普通企业也能用上深度学习
  6. 谷歌大脑最新研究:不用「训练」!高斯过程「超越」随机梯度下降
  7. 这年头,做 Python 不懂点数据结构与算法真不行!
  8. 后浪优秀!21 岁小伙兼职程序员养家,大三存款达 6 位数
  9. “我在苹果商店下载了一个诈骗 App,损失 60 万美金!”
  10. 高可用高性能负载均衡软件HAproxy详解指南-第三章:HAproxy实例