精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何為Electron應(yīng)用開發(fā)原生模塊

開發(fā) 前端
Electron 是目前流行的一種跨平臺桌面應(yīng)用開發(fā)框架。它結(jié)合了Chromium和Node.js,讓前端開發(fā)者能夠使用前端技術(shù)構(gòu)建功能強(qiáng)大的桌面應(yīng)用程序。

大家都知道JavaScript無論是在瀏覽器中運(yùn)行、還是在Node.js中運(yùn)行都是單線程運(yùn)行的,所以并不適合在處理一些CPU密集型任務(wù)。但是Node.js允許開發(fā)者使用C、C++等語言開發(fā)像普通的Node.js模塊一樣通過require()函數(shù)加載的原生模塊。因為Electron內(nèi)置Node.js,這樣就使得Electron同樣具備了相同的能力。

在實際業(yè)務(wù)場景中,也有一些現(xiàn)成的C/C++項目,在Node.js項目中直接復(fù)用可以節(jié)約很多開發(fā)成本。

本文將探討如何在Electron應(yīng)用中開發(fā)原生模塊,以擴(kuò)展應(yīng)用的功能和性能。

搭建原生模塊開發(fā)環(huán)境

在目前的原生模塊開發(fā)中,一般都是基于Node-Api進(jìn)行開發(fā)。

Node-Api是什么呢?

Node-API(Node Application Programming Interface)是一個用于編寫跨平臺原生插件的封裝層。它提供了一組穩(wěn)定的 C/C++ 函數(shù),使開發(fā)者可以編寫與 Node.js 運(yùn)行時環(huán)境兼容的原生插件。通過使用 Node-API,開發(fā)者可以消除由于 Node.js 版本變化而引起的插件不兼容的問題,并且能夠更方便地編寫和維護(hù)跨平臺的原生模塊。

理解一下就是我們無需為不同版本的Node.js編譯不同版本的原生模塊。不同版本的 Node.js 使用同樣的接口為原生模塊提供服務(wù),這些接口是 ABI 化的,只要 ABI 的版本號一致,編譯好的原生模塊就可以直接使用,而不需要重新編譯。

ABI 化是指將軟件接口轉(zhuǎn)化為應(yīng)用程序二進(jìn)制接口(Application Binary Interface)的過程。在編程中,ABI 化的目標(biāo)是確保在不同編譯器、操作系統(tǒng)以及硬件平臺之間的二進(jìn)制兼容性。通過將接口規(guī)范化為二進(jìn)制標(biāo)準(zhǔn),不同模塊或程序可以相互調(diào)用和交互,而無需關(guān)心具體實現(xiàn)細(xì)節(jié)和底層平臺差異。Node-API 的設(shè)計就是為了實現(xiàn)跨版本和跨平臺的 ABI 兼容性,以便 C/C++ 模塊能夠在不同的 Node.js 環(huán)境中無需重新編譯即可運(yùn)行。

Node-API有哪些開發(fā)方式?

基于 Node-API 的原生模塊開發(fā)可以使用 C 語言或者基于 node-addon-api 項目使用 C++ 語言的兩種方式。

  1. 基于C語言開發(fā):由于受眾為前端開發(fā)者,C語言的編程復(fù)雜度高、開發(fā)效率較低,開發(fā)過程可能較為繁瑣。
  2. 基于 node-addon-api項目開發(fā):相對于純 C 語言開發(fā),C++ 提供了更多的高級特性和工具,開發(fā)效率相對較高。node-addon-api 項目提供了一組方便的 C++ API 封裝,簡化了與 Node-API 的交互過程,減少了部分底層操作。

接下來我們就基于這個項目來開發(fā)一個 Electron 的原生模塊。

  1. 安裝 Node.js:首先,確保您已經(jīng)安裝了 Node.js,可以從 Node.js 官網(wǎng)下載并安裝適合您操作系統(tǒng)的版本。
  2. 需要全局安裝 node-gyp,它是專門為構(gòu)建開發(fā)、編譯原生模塊環(huán)境而生的跨平臺命令行工具。
npm install -g node-gyp
  1. 創(chuàng)建空項目目錄:創(chuàng)建一個新的項目目錄,作為原生模塊的開發(fā)目錄。
  2. 初始化 npm 項目:進(jìn)入項目目錄,打開終端,并運(yùn)行以下命令初始化 npm 項目。
npm init
  1. 根據(jù)提示,設(shè)置項目的名稱、版本等信息。
  2. 安裝 node-addon-api:運(yùn)行以下命令安裝 node-addon-api 模塊:
npm install node-addon-api --save-dev

以上就已經(jīng)搭建好了基本的原生模塊開發(fā)環(huán)境,接下來通過一個簡單的例子,來實現(xiàn)一個訪問系統(tǒng)文件的原生模塊帶大家了解一下開發(fā)流程。

開發(fā)原生模塊訪問系統(tǒng)文件并讀取文件內(nèi)容

開發(fā)原生模塊需要熟悉C++編程和Node.js的C/C++擴(kuò)展開發(fā),涉及一些底層的編程和跨平臺的知識。這里的例子較為簡單,方便大家理解。

  1. 創(chuàng)建 C++ 文件:在項目目錄下創(chuàng)建一個 C++ 源文件,例如 filesystem.cpp,并添加以下代碼內(nèi)容:
#include <napi.h>
#include <iostream>
#include <fstream> 

Napi::String ReadFile(const Napi::CallbackInfo& info) { 

    Napi::Env env = info.Env(); 

    // 讀取文件路徑參數(shù) 
    std::string filePath = info[0].As<Napi::String>().Utf8Value(); 

    // 打開文件并讀取內(nèi)容 std::ifstream file(filePath);
    std::string content((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
    file.close();

    // 將內(nèi)容轉(zhuǎn)換為 Napi::String 返回 
    return Napi::String::New(env, content); 
} 

Napi::Object Init(Napi::Env env, Napi::Object exports) { 
    exports.Set("readFile", Napi::Function::New(env, ReadFile));
    return exports; 
}
NODE_API_MODULE(addon, Init)

上述代碼定義了一個 ReadFile 函數(shù),它接受一個文件路徑參數(shù),并返回文件的內(nèi)容。

NODE_API_MODULE是Node-API 提供的一個重要的宏,用于在 C++ 中定義 Node.js 原生模塊的入口點,創(chuàng)建一個模塊初始化函數(shù),并將此函數(shù)暴露給 Node.js 運(yùn)行時。

使用 NODE_API_MODULE 定義原生模塊的入口點,可以讓開發(fā)者以 C++ 的方式編寫模塊的初始化、導(dǎo)出函數(shù)、屬性等,并與 Node.js 運(yùn)行時進(jìn)行交互。并可以在 Node.js 中加載和使用。

Init 函數(shù)是模塊的初始化函數(shù),用于在模塊加載時注冊和導(dǎo)出相應(yīng)的函數(shù)、屬性等。然后,通過 NODE_API_MODULE 將 Init 函數(shù)暴露給 Node.js 運(yùn)行時,并指定模塊的名字為 "addon"。

  1. 創(chuàng)建 binding.gyp 文件:在項目目錄中創(chuàng)建一個名為 binding.gyp 的文件,并添加以下內(nèi)容:
{ 
    "targets": [ 
        { 
            "target_name": "filesystem", 
            "sources": ["filesystem.cpp"]
        }
}

binding.gyp 是一個用于配置 Node.js 原生模塊構(gòu)建過程的項目文件。它采用了 JSON 格式,并使用特定的語法來定義編譯選項、依賴項和源文件等信息。通過編輯 binding.gyp 文件,可以指定編譯器和鏈接器的選項,添加所需的依賴庫,并確定要編譯的源文件。

編譯原生模塊

在構(gòu)建編譯原生模塊時,需要使用 node-gyp ,它會讀取 binding.gyp 文件并根據(jù)其內(nèi)容進(jìn)行編譯操作。node-gyp 提供了一個簡化的構(gòu)建流程,使得開發(fā)人員能夠輕松地配置和構(gòu)建原生模塊。

使用以下命令構(gòu)建該模塊。

$ node-gyp configure 
$ node-gyp build

運(yùn)行上述命令將生成一個名為 build/Release/filesystem.node 的編譯好的原生模塊文件。

接下來,就可以在任何 Node.js 文件中使用該模塊:創(chuàng)建一個名為 app.js 的 JavaScript 文件,并添加以下代碼

const addon = require('./build/Release/filesystem.node'); 

const filePath = '/path/to/file.txt'; 

const content = addon.readFile(filePath); 

console.log(content);

上述代碼使用 require 導(dǎo)入原生模塊,然后調(diào)用 readFile 函數(shù)讀取指定文件的內(nèi)容,并輸出到控制臺。

總結(jié)

在 Electron 應(yīng)用中,使用和開發(fā)原生模塊可以為前端開發(fā)同學(xué)提供更廣闊的可能性;能夠利用操作系統(tǒng)級別的功能來提升應(yīng)用的性能。

那么有同學(xué)就會有疑問,除了自己開發(fā)原生模塊還有什么方案可以給Electron應(yīng)用提供更廣泛的功能擴(kuò)展,包括底層系統(tǒng)功能的訪問、高性能計算呢?

當(dāng)然有,在日常開發(fā)中,可以使用動態(tài)鏈接庫(Dynamic Link Library,DLL)進(jìn)行擴(kuò)展功能的模塊化。使用動態(tài)鏈接庫可以使用更多的語言和框架進(jìn)行開發(fā),適合不同開發(fā)者的需求。比如,一個go開發(fā)者也可以給我們提供一個動態(tài)鏈接庫供Electron調(diào)用,也可以將go代碼打包成不同平臺的文件供其他平臺調(diào)用,更適合獨立功能各個平臺使用的場景。原生模塊則更專注于為 Node.js 和 Electron 應(yīng)用程序提供特定功能的開發(fā)。

在實際應(yīng)用中,可根據(jù)具體需求和開發(fā)團(tuán)隊的技術(shù)棧來選擇合適的方式,結(jié)合動態(tài)鏈接庫和原生模塊來擴(kuò)展 Electron 應(yīng)用程序的功能。

參考鏈接

  • Electron桌面應(yīng)用開發(fā):https://juejin.cn/book/7152717638173966349?enter_from=course_center&utm_source=course_center
  • node-gyp 實現(xiàn) nodejs 調(diào)用 C++:https://juejin.cn/post/6844903971220357134?searchId=20231214152519329167E9F0AB744365BF
責(zé)任編輯:武曉燕 來源: 大轉(zhuǎn)轉(zhuǎn)FE
相關(guān)推薦

2011-02-22 14:42:52

AndroidPad

2022-08-04 10:12:49

桌面技術(shù)

2022-02-21 09:00:00

云原生應(yīng)用開發(fā)

2019-07-18 12:37:20

高性能計算云原生公共云

2022-11-30 18:38:50

2020-04-24 06:26:09

LinuxPython應(yīng)用

2015-12-14 16:18:03

云計算物聯(lián)網(wǎng)應(yīng)用程序開發(fā)

2023-11-24 14:54:03

Node.jsElectronAddon

2014-06-12 13:50:25

2013-05-27 10:01:06

Android開發(fā)Android應(yīng)用縮放圖片

2017-10-11 09:15:07

Windows 應(yīng)用

2013-04-01 09:35:30

移動云應(yīng)用BYOD云模型

2019-10-29 09:48:20

ElectronGithub開源庫

2020-01-03 14:03:46

云計算開發(fā)云原生

2011-11-09 10:50:52

2012-06-06 09:34:43

ASO技巧為應(yīng)用撰寫描述

2014-02-10 09:00:19

混合云公有云應(yīng)用模型

2012-05-16 11:30:39

2012-01-04 10:45:01

2018-01-08 14:31:09

Electron桌面APP前端
點贊
收藏

51CTO技術(shù)棧公眾號

欧美一区二区三区视频免费 | 亚洲一二三四在线观看| 97中文在线观看| 一级片中文字幕| 美女主播精品视频一二三四| 在线一区二区三区| 亚洲激情免费视频| 天天躁日日躁狠狠躁喷水| 热久久一区二区| 超碰91人人草人人干| 999精品免费视频| 黄色成人在线视频| 亚洲成精国产精品女| 亚洲国产一区二区在线 | 日韩激情片免费| 九一精品久久久| 亚洲性受xxx喷奶水| 最近中文字幕一区二区三区| 国产一区二区精品在线| 国产精品久久久久久久成人午夜| 亚洲色诱最新| 九九热精品视频国产| 小早川怜子久久精品中文字幕| 涩爱av色老久久精品偷偷鲁 | 日韩av一卡二卡三卡| 国产免费拔擦拔擦8x高清在线人| 中文字幕视频一区二区三区久| 久久久综合亚洲91久久98| 国产福利小视频| 蜜桃精品视频在线观看| 97香蕉久久超级碰碰高清版| 成年人av电影| 国产精品久久久久久久久久10秀| 精品亚洲男同gayvideo网站| 日韩女优在线视频| 国产精选久久| 欧美精品xxxxbbbb| 我要看一级黄色大片| 日韩av影片| 午夜精品久久久久久久久久久| 五月天在线免费视频| av播放在线| 日本一区二区视频在线观看| 日本精品一区二区三区高清 久久| 国精产品乱码一区一区三区四区| 国产一区二区三区日韩| 国产精品老女人精品视频| 欧美在线观看不卡| 国产一区二区你懂的| 午夜欧美大片免费观看| 久久久精品99| 亚洲天堂成人| 国模视频一区二区| 亚洲一区二区91| 精品96久久久久久中文字幕无| 欧美老妇交乱视频| 免费视频一二三区| 国产精品99免费看| 久久免费精品视频| 豆国产97在线 | 亚洲| 亚洲区一区二| 51ⅴ精品国产91久久久久久| 天堂网中文字幕| 老鸭窝91久久精品色噜噜导演| 欧美在线免费视频| 五月天婷婷导航| 蜜桃视频一区二区三区| 成人精品视频在线| 亚洲精品久久久久久久久久久久久久| 国产精品一区在线观看乱码| 99久久伊人精品影院| 免费国产精品视频| 91偷拍与自偷拍精品| 欧美一区二区三区精美影视| 国产高清av在线| 国产精品日日摸夜夜摸av| 二级片在线观看| 色yeye免费人成网站在线观看| 亚洲电影中文字幕在线观看| 精品国产免费av| 精品国产黄a∨片高清在线| 欧美精品日韩精品| 久久久高清视频| 神马电影久久| 久久久国产91| 亚洲欧美在线观看视频| 日本麻豆一区二区三区视频| 亚洲自拍偷拍色片视频| 头脑特工队2免费完整版在线观看| 久久久影视传媒| 在线一区亚洲| av资源新版天堂在线| 色激情天天射综合网| 在线一区二区不卡| 精品自拍偷拍| 日韩亚洲综合在线| 日干夜干天天干| 久久成人免费电影| 国产亚洲一区在线播放| caoporn国产精品免费视频| 亚洲精品欧美专区| 欧美精品色婷婷五月综合| 中文成人在线| 亚洲欧洲av一区二区| 一级片一级片一级片| 国产精品主播| 999视频在线观看| 国产三级在线| 亚洲成av人片一区二区梦乃| 中文字幕第38页| 美国成人xxx| 草民午夜欧美限制a级福利片| 无码人妻精品一区二区| 粉嫩aⅴ一区二区三区四区五区| 日韩在线第一区| 96av在线| 日韩欧美一级精品久久| 久久国产柳州莫菁门| 激情久久五月| 成人深夜直播免费观看| 第九色区av在线| 亚洲免费视频播放| 3d玉蒲团在线观看| 欧美在线短视频| 日韩一区二区在线看片| 狠狠操狠狠干视频| 亚洲丝袜美腿一区| 久久久久久999| 91原创国产| 爽爽视频在线观看| 午夜精品久久久久久| 日本在线观看视频一区| 四虎成人av| 日韩av成人在线| 天天干天天操av| 亚洲高清免费视频| 女女调教被c哭捆绑喷水百合| 久久视频在线| 国产欧美一区二区三区四区| 国产在线免费观看| 欧美性色视频在线| 大地资源二中文在线影视观看 | 亚洲大胆人体av| www青青草原| 国内精品在线播放| 中文字幕一区二区三区最新| 国产成人精选| 色香阁99久久精品久久久| 中文字幕自拍偷拍| 国产精品麻豆网站| 色婷婷综合网站| 日韩欧美中文| 91精品国产综合久久久久久久久| av片在线看| 精品1区2区3区| 东京热无码av男人的天堂| 日本亚洲一区二区| 亚洲欧美精品| 不卡一区视频| 欧美日本中文字幕| 欧美一级视频免费| 午夜a成v人精品| 亚洲精品理论片| 老司机亚洲精品| 伊人久久大香线蕉av一区| 天天综合91| 色在人av网站天堂精品| 少妇喷水在线观看| 日韩欧美亚洲成人| 超碰97av在线| 国产剧情一区二区三区| 一本久道高清无码视频| 天堂av一区二区三区在线播放| 欧美孕妇性xx| 日本中文字幕伦在线观看| 欧美一区二区在线免费观看| 国产真实的和子乱拍在线观看| 97精品久久久午夜一区二区三区| 亚洲精品中文字幕无码蜜桃| 日韩在线观看一区| 99中文字幕| 奇米777日韩| 久久人体大胆视频| 亚洲狼人综合网| 色婷婷综合久久久中文一区二区| 欧美人与禽zoz0善交| 国产福利精品导航| 蜜臀av午夜一区二区三区| 色爱综合网欧美| 国内精品久久国产| 日本免费在线一区| 97视频色精品| 素人av在线| 亚洲精品suv精品一区二区| 国产精品无码粉嫩小泬| 伊人夜夜躁av伊人久久| 亚洲做受高潮无遮挡| 精品一区中文字幕| 69堂免费视频| 欧美/亚洲一区| 青青成人在线| 6080成人| 成人在线中文字幕| 高清av不卡| 欧美大片在线看免费观看| 国产在线视频网站| 亚洲精品电影网在线观看| 一本到在线视频| 欧美日韩亚洲一区二区| 国产一区二区播放| 国产亚洲综合性久久久影院| 精品人妻无码中文字幕18禁| 视频一区免费在线观看| aa视频在线播放| 欧美在线影院| 亚洲国产精品久久久久久女王| 老司机凹凸av亚洲导航| 91精品中国老女人| 电影天堂国产精品| 91a在线视频| 九色91在线| 久久视频在线看| 97电影在线| 亚洲视频电影图片偷拍一区| 女人18毛片一区二区三区| 欧美一区二区福利视频| 在线观看亚洲一区二区| 色综合久久中文字幕| 日本系列第一页| 亚洲一区二区三区中文字幕| 国模无码国产精品视频| 成人免费在线观看入口| 欧美88888| 国产精品嫩草99a| 欧美日韩中文字幕视频| 国产欧美一区二区三区在线看蜜臀| 手机在线看片日韩| 不卡视频免费播放| 午夜免费福利影院| 成人一级视频在线观看| wwwxxx色| 国产精品一品视频| 中文字幕在线综合| 麻豆国产一区二区| 国产女同无遮挡互慰高潮91| 麻豆91精品91久久久的内涵| 欧美日韩怡红院| 日本不卡视频一二三区| 天天插天天操天天射| 蜜桃免费网站一区二区三区| 911福利视频| 国产自产高清不卡| 中文字幕乱妇无码av在线| 狠狠色狠狠色综合日日91app| 久久精品国产露脸对白| 国内成人精品2018免费看| 制服下的诱惑暮生| 成人一级视频在线观看| 国产又黄又粗又猛又爽的视频| 99久久久免费精品国产一区二区| 特大黑人巨人吊xxxx| 久久综合九色综合97婷婷女人| www.av欧美| 国产精品欧美极品| jizz亚洲少妇| 午夜影院久久久| 欧美亚洲另类小说| 欧美日韩亚洲综合在线 | 欧美黑人精品一区二区不卡| 一区二区三区成人在线视频| 日韩污视频在线观看| 狠狠久久五月精品中文字幕| 69视频免费看| 欧美一区日韩一区| 欧美自拍第一页| 亚洲品质视频自拍网| 波多野结衣在线影院| 久久视频在线视频| 成人国产电影在线观看| 国产精品草莓在线免费观看| 91麻豆精品一二三区在线| 成人av蜜桃| 欧美精品一区二区三区中文字幕 | 亚洲日韩视频| 亚洲一区二区蜜桃| 国产成人精品综合在线观看| 无套内谢大学处破女www小说| 国产精品九色蝌蚪自拍| 久久综合色综合| 91国偷自产一区二区使用方法| 国产精品视频一区二区三区,| 亚洲第一视频网站| a天堂中文在线88| 欧美激情在线狂野欧美精品| 成人做爰免费视频免费看| 波多野结衣一区二区三区在线观看| 亚欧日韩另类中文欧美| 男插女免费视频| 肉丝袜脚交视频一区二区| 女王人厕视频2ⅴk| 国产午夜精品福利| 国产一级一片免费播放| 欧美喷潮久久久xxxxx| 欧美亚洲精品在线观看| yw.139尤物在线精品视频| 涩涩网在线视频| 69174成人网| 大色综合视频网站在线播放| 国自产拍偷拍精品啪啪一区二区| 美国三级日本三级久久99| 在线免费观看a级片| 亚洲色图在线看| 九九热最新视频| 亚洲精品乱码久久久久久按摩观| 国产网友自拍视频导航网站在线观看| 日本中文字幕不卡免费| 成功精品影院| 中国老女人av| 久久国产成人午夜av影院| 李宗瑞91在线正在播放| 午夜精品免费在线观看| 亚洲av无码片一区二区三区| www.久久撸.com| 亚洲成人va| 日韩jizzz| 久久国产精品久久久久久电车 | 久久久久久九九九| 91成人短视频在线观看| 亚洲国产激情一区二区三区| 久久精品亚洲| 欧美亚一区二区三区| 午夜一区二区三区视频| 国产不卡av在线播放| 久久精品美女视频网站| 成人久久网站| 色涩成人影视在线播放| 久久久天天操| 三级网站在线免费观看| 色天天综合久久久久综合片| 色吊丝在线永久观看最新版本| 午夜精品久久久久久久久久久久久| 亚洲天堂中文字幕在线观看| 三级在线免费观看| 国产伦理精品不卡| 欧美黄片一区二区三区| 日韩西西人体444www| 18videosex性欧美麻豆| 97se亚洲综合| 在线播放不卡| 国产肉体xxxx裸体784大胆| 欧美色videos| 黄色片在线免费观看| 国产精品99久久久久久www| 精品产国自在拍| 日韩av在线中文| 亚洲视频一区在线| av中文字幕播放| 久久久伊人日本| 美女久久久久| 无码日韩人妻精品久久蜜桃| 欧美韩国一区二区| 国产精品一区二区黑人巨大| 美日韩精品免费视频| 99a精品视频在线观看| 少妇人妻大乳在线视频| 久久久www成人免费无遮挡大片| 最近国语视频在线观看免费播放| 最近2019中文字幕第三页视频| 成人51免费| 久久久亚洲精品无码| 日本一区二区免费在线观看视频| 国产精品一品二区三区的使用体验| 欧美激情精品在线| 香蕉久久夜色精品国产更新时间| jizz大全欧美jizzcom| 亚洲精品伦理在线| 少妇av在线播放| 国产精品久久久久久久久久免费| 午夜精品一区二区三区国产 | 日韩电影中文 亚洲精品乱码| 黄色激情在线播放| 日韩久久精品一区二区三区| 麻豆精品视频在线| 丰满诱人av在线播放| 久久精品国产2020观看福利| 国产成年精品| 久久精品视频16| 国产免费成人在线视频| aaaa一级片| 91国产视频在线播放| 国产欧美日韩精品高清二区综合区| 欧美日韩中文国产一区发布 | 欧美丰满老妇厨房牲生活| 女仆av观看一区| 在线观看岛国av| 久久亚洲不卡| 中文字幕影片免费在线观看| 91久久精品一区二区三区| 在线网址91| 久久影院理伦片|