參考:
https://segmentfault.com/a/1190000007206301
http://www.shennongmin.org/?p=584
1.在應用目錄打開指令行,需要進入根目錄
正常打包需要用到electron-packager子產品,是以先在指令行中輸入npm install --save-dev electron-packager安裝。
2.package.json裡添加一條打包指令,免得每次打包都要輸入一長串指令。
與webpack的指令類似
"scripts": {
"package": "electron-packager ./ yunfu --win --out ./outApp --arch=x64 --version 1.0.0 --overwrite --ignore=node_modules"
}
參數說明
electron-packager <location of project> <name of project> <platform> <architecture> <electron version> <optional options>
location of project:應用目錄;
name of project:應用名稱;
platform:要打包的平台;
architecture:x86 or x64架構;
electron version:electron 版本(不是應用版本);
optional options:其它選項;
3.執行npm run-script package開始打包。此時打包成功是類似免安裝的版本。
打包完畢後,會多出來一個目錄,比如我的是taobao,打開之後,會有一個taobao-win32-x64目錄,裡面就是打包生成的各種檔案。
========================================================================================================
注意:之後操作的路徑:
在之前打包之後,建立的檔案夾根目錄下面
我的,就是在目前目錄的 outApp檔案夾下面,這是我正常打包的輸出目錄
輸出exe安裝檔案,需要在之前,正常的打包方式下面進行....
4.打包成安裝版,在上面的步驟之後繼續下去,在生成的outApp檔案夾下,有taobao-win32-x64檔案夾,在此檔案夾的同層進行處理。
5.建立package.json檔案,package.json的内容可以簡單寫下:
{
"name": "taobao",
"version": "1.0.0"
}
6.打開指令行,(之前,在這一步出的問題--沒有裝grunt-cli)
輸入npm install grunt-electron-installer --save-dev安裝grunt-electron-installer子產品,
再安裝grunt -cli,npm install -g grunt-cli,
接着輸入npm install grunt --save-dev安裝grunt。
7.配置Gruntfile.js。建立一個Gruntfile.js檔案,并配置gurnt.config,我的配置如下:
var grunt = require("grunt");
grunt.config.init({
pkg: grunt.file.readJSON('package.json'),
'create-windows-installer': {
x64: {
appDirectory: 'taobao-win32-x64',
authors: 'zf.',
exe: 'taobao.exe',
description:"taobao",
}
}
})
grunt.loadNpmTasks('grunt-electron-installer');
grunt.registerTask('default', ['create-windows-installer']);
8.grunt打包,輸入grunt。(不是npm grunt)
9.在main.js裡加入生成快捷方式的功能。
//添加監聽并生成快捷方式
var handleStartupEvent = function () {
if (process.platform !== 'win32') {
return false;
}
var squirrelCommand = process.argv[1];
switch (squirrelCommand) {
case '--squirrel-install':
case '--squirrel-updated':
install();
return true;
case '--squirrel-uninstall':
uninstall();
app.quit();
return true;
case '--squirrel-obsolete':
app.quit();
return true;
}
// 安裝
function install() {
var cp = require('child_process');
var updateDotExe = path.resolve(path.dirname(process.execPath), '..', 'update.exe');
var target = path.basename(process.execPath);
var child = cp.spawn(updateDotExe, ["--createShortcut", target], { detached: true });
child.on('close', function(code) {
app.quit();
});
}
// 解除安裝
function uninstall() {
var cp = require('child_process');
var updateDotExe = path.resolve(path.dirname(process.execPath), '..', 'update.exe');
var target = path.basename(process.execPath);
var child = cp.spawn(updateDotExe, ["--removeShortcut", target], { detached: true });
child.on('close', function(code) {
app.quit();
});
}
};
if (handleStartupEvent()) {
return;
}
10.版本更新的時候:
重新打包 進入項目的根目錄:
npm run-script package開始打包
重新建立安裝檔案:
進入outAppk路徑下面:
grunt
貌似會報錯,但是效果也是可以實作的.... 不知道為毛