成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Electron 開發(fā)的 gulp 配置

PingCAP / 2726人閱讀

摘要:在我看來,對于廣大前端開發(fā)者來說,最為耳熟能詳?shù)膽?yīng)該是和。的很好處理,和前端開發(fā)類似,和都有類似的工具,直接將前端開發(fā)中使用的配置挪過來就好。至此,只需要在終端中執(zhí)行就能達(dá)到開發(fā)過程中自動(dòng)和的目的了。

源自 Atom-shell 的 Electron 目前是一個(gè)很火的項(xiàng)目。已經(jīng)有很多開發(fā)者基于 Electron 開發(fā)出了各種各樣的桌面程序。在我看來,對于廣大前端開發(fā)者來說,最為耳熟能詳?shù)膽?yīng)該是 Atom 和 VS Code。在 Electron 的官網(wǎng)上能夠看到更多有意思的項(xiàng)目。

之前提到過,我的計(jì)劃之一就是玩一下 Electron,打造一個(gè)桌面工具。上個(gè)星期經(jīng)過幾次摸索和調(diào)研確定了這個(gè)項(xiàng)目的可行性之后,開始著手打造。近幾天慢慢的構(gòu)建出基礎(chǔ)的項(xiàng)目前端結(jié)構(gòu)。

對于前端的技術(shù)選型已經(jīng)沒有之前那么糾結(jié)了,思考過后決定了:React。原因很簡單,之前的一個(gè)小項(xiàng)目用的是 Vuejs 的一套體系,這次想換換口味。雖然之前我一直很不喜歡 React 那種模板和邏輯混合在一起的方式,但是很喜歡 Redux 的處理方式,所以忍不住試試看,到底是用 React 爽還是 Vue 爽。

了解過 Electron 的應(yīng)該都知道它的 main process 和 renderer process。main process 使用 BroswerWindow 實(shí)例創(chuàng)建 web page,每個(gè) BroswerWindow 實(shí)例在它自己的 renderer process 中運(yùn)行 web page,每當(dāng) BroswerWindow 實(shí)例被銷毀時(shí),其對應(yīng)的 renderer process 也會(huì)被終止。main process 管理所有的 web page 及其對應(yīng)的 renderer process 。

我覺得可以這么簡單地理解的:如果將 renderer process 負(fù)責(zé)管理渲染的 web 頁面所做的事情和瀏覽器類似,那么 main process 則是包裹著這個(gè)“瀏覽器”的外殼,將“瀏覽器”中的代碼與系統(tǒng)底層聯(lián)系在一起。

在實(shí)踐過程中,我發(fā)現(xiàn) main process 的文件不能使用 import(應(yīng)該說是無法使用 ES6 語法),可以使用 babel 將使用 ES6 語法的代碼編譯成可執(zhí)行的版本代碼。而 renderer process 的代碼則通過 webpack 打包 React 代碼。

gulp-babel 編譯 main process 代碼

通過 gulp 和 babel 可以很輕松地完成

var path = require("path");
var gulp = require("gulp");
var babel = require("gulp-babel");

var ROOT_PATH = path.resolve(__dirname);
var APP_PATH = path.resolve(ROOT_PATH, "app");

// main process 的編譯
gulp.task("babel:electron-main", function () {
  return gulp.src([APP_PATH + "/main.js", APP_PATH + "/main/**/*.js"], { base: APP_PATH })
    .pipe(babel())
    .pipe(gulp.dest("dist"));
});

gulp 與 babel 的配合使用的更多細(xì)節(jié)可以參考 babel 和 gulp-babel。

React 的 webpack 配置在這里我就不重復(fù)了,到處都能找到。

process 的重啟和刷新

我發(fā)現(xiàn)在目前市面上Electron 的相關(guān)基礎(chǔ)教程中,簡單的介紹都是如此:

// 安裝 
npm install -g electron-prebuilt
// 啟動(dòng)
electron .

//更好一點(diǎn)的是按照官方給出的 quick start
npm start

但是這樣有一個(gè)很直接的問題:每次修改 main process 相關(guān)代碼之后需要重啟,修改了 renderer process 相關(guān)代碼之后需要手動(dòng)刷新,這很影響開發(fā)體驗(yàn)。

renderer process 的 hot load 很好處理,和前端開發(fā)類似,react 和 vue 都有類似的工具,直接將前端開發(fā)中使用的配置挪過來就好。而 main process 的自動(dòng)化則需要另尋辦法,當(dāng)然,也不難。使用 electron-connect 可以很好的幫助我們解決這個(gè)問題,在 gulp 中設(shè)置好task 之后然后在 renderer process 和 main process 中的插入一段代碼即可。

gulpfile.js

var gulp = require("gulp");
var gutil = require("gulp-util");
var electron = require("electron-connect").server.create();

gulp.task("watch:electron", function () {
  electron.start();
  gulp.watch(["./app/src/main.js", "./app/src/main/**/*.js"], electron.restart);
  gulp.watch(["./app/dist/**/*.{html,js,css}"], electron.reload);
});

RendererProcess




    
    Hello World!





Chromium ,
and Electron .
and Node .

MainProcess

"use strict";

var app = require("app");
var BrowserWindow = require("browser-window");
var client = require("electron-connect").client;

app.on("ready", function () {
  var mainWindow = new BrowserWindow({
    width: 400,
    height: 300
  });
  mainWindow.loadUrl("file://" + __dirname + "/index.html");

  // Connect to server process
  client.create(mainWindow);
});

細(xì)心的同學(xué)可能會(huì)發(fā)現(xiàn),在 watch 的 task 中,同時(shí)對 main process 和 renderer process 的代碼監(jiān)聽,對應(yīng)的操作是 restart 和 reload。reload 會(huì)刷新當(dāng)前的頁面,在這里 React 的 hot load 都可以不需要了。印象中好像 hot load 是不會(huì)整個(gè)刷新頁面的,回頭可以試試。

至此,只需要在終端中執(zhí)行

gulp watch:electron 

就能達(dá)到開發(fā)過程中 electron 自動(dòng) restart 和 reload 的目的了。如果想看詳細(xì)文檔可以前往 這里。

上述只是簡單的例子,更多時(shí)候需要根據(jù)項(xiàng)目的規(guī)劃做調(diào)整,一下是我的 gulpfile.js

var path = require("path");
var gulp = require("gulp");
var babel = require("gulp-babel");
var gutil = require("gulp-util");
var webpack = require("webpack");
var webpackConfig = require("./webpack.config.js");
var electron = require("electron-connect").server.create();

var ROOT_PATH = path.resolve(__dirname);
var APP_PATH = path.resolve(ROOT_PATH, "app");

// 開發(fā)
var webpackConfigDev = Object.create(webpackConfig);
webpackConfigDev.devtool = "eval-source-map";
webpackConfigDev.debug = true;

var devCompiler = webpack(webpackConfigDev);

// renderer process 的 webpack 編譯
gulp.task("webpack:build-dev", function () {
  devCompiler.run(function (err, status) {
    if (err) {
      throw new gutil.PluginError("webpack:build-dev", err);
    }
    gutil.log("[webpack:build-dev]", status.toString({
      colors: true
    }));
  });
});

// main process 的編譯
gulp.task("babel:electron-main", function () {
  return gulp.src([APP_PATH + "/main.js", APP_PATH + "/main/**/*.js", APP_PATH + "/constant/*.js"], { base: APP_PATH })
    .pipe(babel())
    .pipe(gulp.dest("dist"));
});


gulp.task("watch", ["babel:electron-main", "webpack:build-dev"], function () {

  electron.start();

  gulp.watch(["./app/main.js", "./app/main/**/*.js"], ["babel:electron-main"]);
  gulp.watch([APP_PATH + "/constant/*.js", "./app/src/**/*.{html,js,css}"], ["webpack:build-dev"]);

  gulp.watch(["./dist/main.js", "./dist/main/**/*.js"], electron.restart);
  gulp.watch(["./dist/renderer/*.{html,js,css}", "./dist/renderer/**/*.{html,js,css}"], electron.reload);

});

gulp.task("dev", ["watch"]);

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/90904.html

相關(guān)文章

  • 【譯】使用 AngularJS 和 Electron 構(gòu)建桌面應(yīng)用

    摘要:原文的框架以前叫做允許你使用和編寫跨平臺的桌面應(yīng)用。這個(gè)教程向我們展示了如何使用和構(gòu)建一個(gè)桌面應(yīng)用。我們的應(yīng)用看起來會(huì)是這個(gè)樣子配置開發(fā)環(huán)境是微軟的一款跨平臺代碼編輯器。是基于和微軟自身的開發(fā)的。我們需要用我們最終構(gòu)建的應(yīng)用來替換它。 原文:Creating Desktop Applications With AngularJS and GitHub Electron showImg(...

    maxmin 評論0 收藏0
  • Electron 打造 Win/Mac 應(yīng)用,從「代碼」到可下載「安裝包」,可能比你想得麻煩一

    摘要:三配置環(huán)節(jié)目的一是為之后的環(huán)節(jié)初始化工作流參數(shù),二是準(zhǔn)備好應(yīng)用文件夾內(nèi)容即要打包的目標(biāo)文件夾做的事解析命令行參數(shù),初始化工作參數(shù),填充配置文件,把配置文件和相關(guān)依賴文件導(dǎo)入到文件夾內(nèi)合適的 首發(fā)于酷家樂前端博客,作者@摘星(segmentfault @StinsonZhao) 我們能從很多地方學(xué)習(xí)到怎么起一個(gè) Electron 項(xiàng)目,有些還會(huì)介紹怎么打包或構(gòu)建你的代碼,但距離「真正地...

    LdhAndroid 評論0 收藏0
  • 【提高系列】webpack相關(guān)知識

    摘要:基本配置項(xiàng)基本配置項(xiàng)。的插件架構(gòu)主要基于實(shí)現(xiàn)的,這個(gè)就是專注于事件的廣播和操作。開啟多進(jìn)程,加快打包速度。 這次我們主要研究的是webpack框架的相關(guān)知識,webpack是一個(gè)打包構(gòu)建的前端框架,用于解決前端開發(fā)的模塊化問題。 應(yīng)用場景和縱向比較 說到webpack,肯定你還會(huì)想到gulp和grunt這些框架,那么webpack是做什么的呢?他和其他的框架有什么區(qū)別呢?我們一起來分析...

    DirtyMind 評論0 收藏0
  • 前端文檔收集

    摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個(gè)最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個(gè)最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...

    jsbintask 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<