## [**electron-forge**](https://github.com/electron-userland/electron-forge)
Electron-forge 是 Electron 的一個腳手架,它可以自動生成項目文件
[electron-forge官方使用文檔](https://www.electronforge.io/)
electron-forge使用了以下包
* [electron-rebuild](https://github.com/electron/electron-rebuild):根據正確的Electron版本自動重新編譯本機Node.js模塊。
* [electron-packager](https://github.com/electron-userland/electron-packager):自定義并捆綁您的Electron應用程序,以使其可以分發。
>[danger]入門型 最簡單的
**Note**:
Electron Forge 要求Node版本v10+
依賴git(必須安裝git)
[使用electron-forge和cnpm命令來寫一個簡單的electron桌面應用](https://www.wkwkk.com/article/6ed59095a250f56fdb9f68edbf01b3fd.html)
### **安裝electron-forge**
建議是安裝成全局,這樣方便使用
```
npm install -g electron-forge
```
##### **建立項目、運行**
下面的命令在當前目錄下建立一個my-project目錄,里面就是我們的工程代碼了,同時這里指定了使用vue模板,如果不指定的話,默認會使用ES6/7的模板
```
//建立項目方法1 此方法建立項目太卡,慎重
//如果npm版本>5則推薦使用第二種方法的npx方法
npm i -g @electron-forge/cli
electron-forge init my-project --template=vue
//運行
//命令沒有帶路徑,表示默認使用當前目錄
//cd到項目目錄就無需帶路徑了
cd my-new-app
electron-forge start
//建立項目方法2 npm版本>=5即可用,無需electron-forge也可用 (推薦)
npx create-electron-app my-app
使用這個否則會報下面的錯
npx @electron-forge/cli init my-new-app
//運行
cd my-app
npm start
//建立項目方法3 yarn方式
yarn create electron-app my-app
cd my-app
npm start 或者 yarn start
```
##### **打包**
```
electron-forge make
```
>[danger]會報錯
Electron forge was terminated:
You must depend on "electron-prebuilt-compile" in your devDependencies
解決:npx @electron-forge/cli init my-new-app 重新構建項目
這里有兩種形式的打包,分別在不同場景下使用
`electron-forge package` 只是打包成一個目錄到out目錄下,注意這種打包一般用于調試,并不是用于分發
`electron-forge make` 這個才會打出真正的分發包,放在out\\make目錄下
兩個命令都可以使用--arch 和--platform參數來指定系統結構和平臺,但是需要注意的是只能打包你當前機器的平臺包,比如你用OSX是無法打出windows平臺安裝包的;這兩個參數不填寫的話,默認和當前系統一致
另外,make是用squirrel打出來的包,安裝后是放在%localappdata%下的
***直接打開package.json,命令配置如下***

打包前需要配置打包參數
打包的主要配置參數在packagerConfig與makes下
forge可能的配置參數如下
```
{
packagerConfig: { ... },
electronRebuildConfig: { ... },
makers: [ ... ],
publishers: [ ... ],
plugins: [ ... ],
hooks: { ... },
buildIdentifier: 'my-build'
}
```
**參數詳情**
* packagerConfig:參考[electron-packager的api](https://github.com/electron-userland/electron-packager/blob/master/docs/api.md) 請注意,您不能覆蓋dir, arch, platform,outor electronVersion選項,因為它們是由Electron Forge內部設置的
* electronRebuildConfig:參考[electron-rebuild的api](https://github.com/electron/electron-rebuild#how-can-i-integrate-this-into-grunt--gulp--whatever)
* [makers](https://www.electronforge.io/config/makers)
* [publishers](https://www.electronforge.io/config/publishers)
* [plugins](https://www.electronforge.io/config/plugins)
* [hooks](https://www.electronforge.io/configuration#hooks)
* [buildIdentifier](https://www.electronforge.io/configuration#build-identifier)
可根據自己喜好,直接配置在package.json或者配置在單獨文件再在package.json加載
package.json
```
{
"name": "my-app",
"version": "0.0.1",
"config": {
"forge": "./forge.config.js"
}
}
```
forge.config.js
```
module.exports = {
packagerConfig: {},
makers: [
{
name: '@electron-forge/maker-zip'
}
]
}
```
**直接配置實例配置文件的格式**
```
{
"name": "my-new-app",
"productName": "my-new-app",
"version": "1.0.0",
"description": "My Electron application description",
"main": "src/index.js",
"scripts": {
"start": "electron-forge start",
"package": "electron-forge package",
"make": "electron-forge make",
"publish": "electron-forge publish",
"lint": "echo \"No linting configured\""
},
"keywords": [],
"author": {
"name": "dash",
"email": "dash@163.com"
},
"license": "MIT",
"config": {
"forge": {
"packagerConfig": {},
"makers": [
{
"name": "@electron-forge/maker-squirrel",
"config": {
"name": "my_new_app"
}
},
{
"name": "@electron-forge/maker-zip",
"platforms": [
"darwin"
]
},
{
"name": "@electron-forge/maker-deb",
"config": {}
},
{
"name": "@electron-forge/maker-rpm",
"config": {}
}
]
}
},
"dependencies": {
"electron-squirrel-startup": "^1.0.0"
},
"devDependencies": {
"@electron-forge/cli": "^6.0.0-beta.47",
"@electron-forge/maker-deb": "^6.0.0-beta.47",
"@electron-forge/maker-rpm": "^6.0.0-beta.47",
"@electron-forge/maker-squirrel": "^6.0.0-beta.47",
"@electron-forge/maker-zip": "^6.0.0-beta.47",
"electron": "7.1.10"
}
}
```
- npm
- 更新
- 基礎
- Api
- 安裝Node
- node_modules本地安裝與全局安裝
- Inspector
- 模塊
- hello world
- 安裝插件的版本
- 更新package.json文件的插件版本
- 使用nodejs開發桌面客戶端應用
- Electron
- api
- 使用 Node.js 的 API
- 事件
- electron配置
- 安裝
- 調試
- 讀取本地文件
- 調用Html5的拖放api
- 官方示例下載
- WebView內嵌窗口
- window.open彈出子窗口及其操作
- BrowserWindow渲染主窗口
- 主進程與渲染進程的通信
- 菜單
- 網絡
- 與react結合
- 打包
- 前言
- 對比
- electron-forge
- 打包工具一:electron-packager
- 打包工具二:electron-builder
- Boilerplates樣板工程
- 通用配置文檔
- NW.js
- npm install、npm install --save與npm install --save-dev區別