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

資訊專欄INFORMATION COLUMN

如何搭建Electron開發(fā)環(huán)境

TwIStOy / 3206人閱讀

摘要:原文發(fā)表于如何搭建開發(fā)環(huán)境這個項(xiàng)目結(jié)構(gòu)是我在編寫基于和的七牛文件上傳總結(jié)出來的本文主要介紹如何從零開始搭建高效的開發(fā)環(huán)境主要內(nèi)容如下通過合理的目錄劃分來組織代碼使用簡化開發(fā)如何在渲染進(jìn)程開發(fā)時使用熱更新如何在主進(jìn)程開發(fā)時使用自動重啟如何在主

原文發(fā)表于 https://lleohao.github.io/2017/09/02/如何搭建Electron開發(fā)環(huán)境/

這個項(xiàng)目結(jié)構(gòu)是我在編寫 基于Electron 和 Angular 的七牛文件上傳App 總結(jié)出來的

本文主要介紹如何從零開始搭建高效的Electron開發(fā)環(huán)境, 主要內(nèi)容如下:

通過合理的目錄劃分來組織代碼

使用npm script簡化開發(fā)

如何在渲染進(jìn)程開發(fā)時使用熱更新

如何在主進(jìn)程開發(fā)時使用自動重啟

如何在主進(jìn)程開發(fā)時使用Typescript

如何打包和發(fā)布軟件

示例項(xiàng)目地址 https://github.com/lleohao/el...

發(fā)現(xiàn) http://hao.jser.com/ 這個網(wǎng)站臭不要臉的轉(zhuǎn)載文章

目錄結(jié)構(gòu)劃分 初始化目錄

首先按照常規(guī)的方法新建一個項(xiàng)目文件夾(這里我的示例文件夾叫做electron-base, 然后使用npm init初始化目錄。

目前我們的開發(fā)目錄如下:

electorn-base
├── .gitignore - git忽略文件
├── LICENSE - 開源協(xié)議
├── README.md - 文檔
└── package.json - npm package
目錄劃分

Electron 的開發(fā)主要分為兩個部分, 其中主進(jìn)程(Main Process)主要負(fù)責(zé)打開頁面和調(diào)用系統(tǒng)底層的資源等, 渲染進(jìn)程(Renderer Process)則是一個普通的網(wǎng)頁窗口.

兩個進(jìn)程的開發(fā)有著不同的開發(fā)方式, 主進(jìn)程更像是傳統(tǒng)Node的開發(fā), 而渲染進(jìn)程則是普通的前端開發(fā). 同時它們之間又有著可以共用的部分(如輔助函數(shù)、數(shù)據(jù)模型等), 因此可以按照下面的方式劃分

electorn-base
├── ... - 省略
└── src - 代碼源文件
    ├── main - 主線程代碼
    ├── renderer - 渲染線程
    └── shared - 公用代碼
Electron quick start

接下來運(yùn)行npm install electron -D安裝Electron,同時在package.json添加main字段, 這代表整個項(xiàng)目的入口文件,這里我們先設(shè)置為src/main/main.js.

順便添加上兩個文件

# src/main.js
const { app, BrowserWindow } = require("electron")
const path = require("path")
const url = require("url")

let win

function createWindow() {
    win = new BrowserWindow({ width: 800, height: 600 })

    win.loadURL(url.format({
        pathname: path.join(__dirname, "../renderer/index.html"),
        protocol: "file:",
        slashes: true
    }))

    // Open the DevTools.
    win.webContents.openDevTools()

    // Emitted when the window is closed.
    win.on("closed", () => {
        // Dereference the window object, usually you would store windows
        // in an array if your app supports multi windows, this is the time
        // when you should delete the corresponding element.
        win = null
    })
}

// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on("ready", createWindow)

// Quit when all windows are closed.
app.on("window-all-closed", () => {
    // On macOS it is common for applications and their menu bar
    // to stay active until the user quits explicitly with Cmd + Q
    if (process.platform !== "darwin") {
        app.quit()
    }
})

app.on("activate", () => {
    // On macOS it"s common to re-create a window in the app when the
    // dock icon is clicked and there are no other windows open.
    if (win === null) {
        createWindow()
    }
})



  
    
    Hello World!
  
  
    

Hello World!

We are using node , Chrome , and Electron .

在根目錄運(yùn)行electron .(或者是./node_modules/.bin/electron .)啟動程序

為了以后方便啟動程序, 將這段命令添加到package.json

// package.json 部分內(nèi)容
"main": "src/main/main.js",
"scripts": {
    "start": "./node_modules/.bin/electron ."
},
"devDependencies": {
    "electron": "^1.7.5"
}
開發(fā)渲染線程

渲染線程的開發(fā)跟普通的前端開發(fā)沒有多大的區(qū)別, 為了開發(fā)的效率, 我們通常會選擇一款前端開發(fā)框架, 這里我選擇的是Angular, 當(dāng)然也可以選擇其他的框架, 只需要按照下文中的要求修改打包路徑.

導(dǎo)入Angular(可選, 使用其他框架可以跳過)

這里我使用Angular-cli工具來初始化項(xiàng)目

安裝cli工具

`npm install -g @angular/cli`

初始化目錄

` ng new electron-base -sd src/renderer -si -sg -st --routing true --styles scss ` 

修改.angular-cli.json

"apps": [{
  "root": "src/renderer",    // 源文件目錄
  "outDir": "out/renderer", // 輸出目錄
  "baseHref": "./", // 解決打包后無法加載文件
  ...
}]

如何在開發(fā)過程中進(jìn)行代碼熱更新

前端開發(fā)中, 我們可以使用webpack享受到自動刷新、熱更新等方便的功能, 那么在Electron的開發(fā)過程我們?nèi)绾蜗硎艿牡竭@些功能了?這里我們只需要簡單的修改下main.js文件即可

function isDev() {
    return process.env["NODE_ENV"] === "development"
}

function createWindow() {
    win = new BrowserWindow({ width: 800, height: 600 })

    if (isDev()) {
        // 這里的url換成你所使用框架開發(fā)時的url
        win.loadURL("http://127.0.0.1:4200");
    } else {
        win.loadURL(url.format({
            pathname: path.join(__dirname, "../renderer/index.html"),
            protocol: "file:",
            slashes: true
        }))
    }

    // Open the DevTools.
    win.webContents.openDevTools()

    // Emitted when the window is closed.
    win.on("closed", () => {
        // Dereference the window object, usually you would store windows
        // in an array if your app supports multi windows, this is the time
        // when you should delete the corresponding element.
        win = null
    })
}

開發(fā)時我們還是按照以前的方式啟動一個webpcak服務(wù)器進(jìn)行開發(fā), Electron通過HTTP協(xié)議打開頁面, 這樣我們依舊可以享受到代碼熱更新等功能.

通過設(shè)置環(huán)境變量NODE_ENV來區(qū)分開發(fā)和生成環(huán)境, 在package.json中添加兩個命令來方便開發(fā)

"scripts": {
  "ng": "ng", // angular alias
  "start": "NODE_EBV=production ./node_modules/.bin/electron .", // 添加環(huán)境變量
  "dev:renderer": "ng serve" // 啟動渲染線程開發(fā)服務(wù)器
},
打包渲染線程代碼

開發(fā)完成后我們需要將前端的代碼進(jìn)行代碼打包, 一個好的習(xí)慣是將代碼的打包目錄放置在項(xiàng)目的根目錄中, 這里我將前端的打包目錄設(shè)置在out/renderer

Angular項(xiàng)目只需要修改.angular-cli.json中的outDir字段, 其他的框架可以自行修改.

package.json中添加打包命令

"scripts": {
  ....
  "build:renderer": "ng buidl --prod" // 打包渲染線程代碼
},
開發(fā)主線程

主線程的開發(fā)如Node程序的開發(fā)沒有多大的區(qū)別, 這里就不多贅述.

雖然NodeES6的支持已經(jīng)很完善了, 但更新的標(biāo)準(zhǔn)的支持就不怎么好, 這里我們可以使用Babel之類的工具進(jìn)行來使用最新的語法.

這里我推薦使用Typescript, 優(yōu)點(diǎn)主要有三個:

靜態(tài)檢查, 畢竟是主線程的代碼, 有點(diǎn)錯誤可就是程序直接崩潰的節(jié)奏

自動提示, 這個不解釋

編譯方便, 比起Babel的配置文件, Typescript的配置要簡單的多

使用Typescript (不使用的可以跳過)

安裝Typescript

運(yùn)行npm install typescript -D

添加配置文件, 在src目錄下添加tsconfig.main.json文件

{
    "compilerOptions": {
        "outDir": "../out",      // 輸出目錄, 同渲染線程放在一起
        "sourceMap": true,         // 調(diào)試時需要
        "moduleResolution": "node",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "target": "es6",         // 輸出代碼版本, 由于在Node中運(yùn)行, es6沒問題
        "module": "commonjs",    // module 處理方式
        "typeRoots": [            // .d.ts 目錄
            "../node_modules/@types"
        ],
        "lib": [                // 可選, 添加新的語法支持
            "es2017"
        ]
    },
   "exclude": [                    // 排除渲染線程目錄
        "renderer"
   ]
}

package.json中添加開發(fā)和打包命令

"scripts": {
...
  "dev:main": "tsc -p ./src/tsconfig.main.json -w", // 開發(fā)
  "build:main": "tsc -p ./src/tsconfig.main.json"   // 打包
}

主線程調(diào)試 (使用的編輯器是vscode)

添加啟動配置文件, 項(xiàng)目根目錄新建.vscode文件夾,在其中新建launch.json

{
    // Use IntelliSense to learn about possible Node.js debug attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [{
        "type": "node",
        "request": "launch",
        "name": "Launch Program",
        "cwd": "${workspaceRoot}",
        "runtimeExecutable": "${workspaceRoot}/node_modules/.bin/electron",
        "program": "${workspaceRoot}/src/main/main.ts", // 你的主文件
        "sourceMaps": true,                            
        "outFiles": [
            "${workspaceRoot}/out/**/*.js"    // 你的輸出文件目錄
        ],
        "env": {
            "NODE_ENV": "development"
        }
    }]
}

使用組合鍵ctrl + f5啟動程序

在文件中添加斷點(diǎn)進(jìn)行調(diào)試

主線程開啟自動刷新 (可選)

我們的渲染線程可以做到代碼變更后自動刷新頁面, 在主線程的開發(fā)中我們可以使用 nodemon 來實(shí)現(xiàn)同樣的功能

安裝nodemon

npm install nodemon -D

修改啟動命令

"scripts": {
    "start": "nodemon --watch src/main --watch src/shared --exec "./node_modules/.bin/electron" ./out/main/main.js"
}

以后開發(fā)時只需要運(yùn)行npm start就可做到主線程的自動刷新

打包主線程

主線程的開發(fā)過程我們可能會使用其他的構(gòu)建工具, 這里我們同渲染線程一樣, 將主線程的打包文件放在out目錄中, 至此打包目錄的結(jié)構(gòu)應(yīng)當(dāng)如下

out
├── main - 主線程打包文件位置
│   └── main.js - 入口文件
├── renderer - 渲染線程打包位置
│   ├── .... 
│   └── index.html - 入口頁面
└── shared - 公用文件
    └── utils.js
打包和發(fā)布

electron-builder 可以將我們的程序打包成可執(zhí)行文件, 它的配置信息發(fā)在package.json

這里配置的是Mac的打包信息, 具體的可以自行查閱文檔

{
  "main": "out/main/main.js", // 入口文件
  "scripts": {
    ...
    "pack": "electron-builder -m --dir", // 簡單打包軟件, 用于測試
    "dist": "electron-builder -m",         // 正式打包軟件
    "build": "npm run build:renderer && npm run build:main && npm run dist" // 打包軟件
  },
  "build": {
    "appId": "com.lleohao.sample",         // 自行修改 
    "mac": {
      "category": "public.app-category.productivity" // 自行修改
    }
  }
}

運(yùn)行npm build即可打包軟件

開發(fā)流程

運(yùn)行npm run dev:renderer啟動渲染線程開發(fā)

運(yùn)行npm run dev:main啟動主線程開發(fā)

運(yùn)行npm start打開Electron程序

運(yùn)行npm build打包程序

示例項(xiàng)目地址 https://github.com/lleohao/el...

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

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

相關(guān)文章

  • Hola~ 一款基于Electron的聊天軟件

    摘要:前言本項(xiàng)目旨在從零到壹,制作一款界面精美的聊天軟件。因?yàn)楸救耸情_發(fā),設(shè)計(jì)功底欠缺,所以軟件設(shè)計(jì)的有點(diǎn)丑,如果有大神有更好的,歡迎。 Hola 前言 本項(xiàng)目旨在從零到壹,制作一款界面精美的聊天軟件。 Github 地址因?yàn)橐压ぷ?,所以可能沒有多少時間來繼續(xù)跟進(jìn)這個項(xiàng)目了,項(xiàng)目可優(yōu)化的點(diǎn)已在下文列出,歡迎大家 Fork 或 Star。 ps: 征 logo 一枚。因?yàn)楸救耸情_發(fā),設(shè)計(jì)功底...

    Kaede 評論0 收藏0
  • electronVue+bootstrapVue搭建桌面應(yīng)用開發(fā)環(huán)境

    摘要:下安裝安裝和腳手架樣板代碼安裝依賴并運(yùn)行你的程序環(huán)境下安裝在你的入口文件中注冊組件,并且相應(yīng)的代碼實(shí)例 1.npm下安裝electron npm install electron -g 2.安裝 vue-cli 和 腳手架樣板代碼 npm install -g vue-cli vue init simulatedgreg/electron-vue my-project 3.安裝依賴并運(yùn)...

    warnerwu 評論0 收藏0
  • electron + react + react-router + mobx + webpack 搭

    摘要:調(diào)試集成環(huán)境選擇模塊,簡單分離開發(fā),測試,線上環(huán)境。程序保護(hù)開機(jī)自啟托盤最小化崩潰監(jiān)控升級一行代碼接入升級平臺,實(shí)現(xiàn)客戶端升級功能打包構(gòu)建一個指令搞定打包項(xiàng)目地址 項(xiàng)目地址 : https://github.com/ConardLi/electron-react electron-react electron + react + react-router + mobx + webpac...

    pingan8787 評論0 收藏0
  • 使用Electron+avalon+jquery+codemirror開發(fā)自己的IDE

    摘要:入口,可為數(shù)組指明那些文件名是要掃描到的沒什么稀奇的,就是配了的路徑和注意如果你要使用也是,盡量使用來解決的坑,的配置我就不講了配置好了就可以愉快的開始開發(fā)了其實(shí)還是傳統(tǒng)的寫網(wǎng)頁而已,只不過可以加入了,很酷炫是不是 在糾結(jié)了一個月之后,發(fā)了無數(shù)帖子,我終于舍棄nw.js投入electron的懷抱,事實(shí)證明我是對的,electron居然有中文文檔,還有官方示例,簡直不要太爽! showI...

    jzzlee 評論0 收藏0
  • Electron 前端提測小工具

    摘要:場景目前公司的測試環(huán)境還是由開發(fā)來搭建和部署的。沒網(wǎng),我就做個離線版的工具唄。調(diào)研選型技術(shù)目前我了解到使用前端技術(shù)做桌面應(yīng)用有和以及著三種神器。好了,多說無用,來預(yù)覽一下我們的小工具吧默認(rèn),就是最新的要提測的包。更新于年月日已入手。 場景 目前公司的測試環(huán)境還是由開發(fā)來搭建和部署的。這種做法是極其不科學(xué)的。所以那種部署啊什么的重復(fù)性的操作還是做個工具讓測試自己去部署好了。先來預(yù)覽一下工...

    Riddler 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<