上一篇文章详细描述了jenkins主从结构的建立,这一篇就主要描述使用nw.js构建windows程序的方法
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
首先是构建环境的确认,node/inno setup / nw.js下载安装,安装上述完成以后记得在路径里面加入上午安装可执行文件包路径,与大多数网上文章不同的是我们采用inno setup来打包程序而不是使用Virtual Box进行打包。
nw.js实际上是免安装的,下载之后进行解包得到如下目录
在该目录下只需要配置package.json,就可以直接拖动目录或者html页面到nw.exe进行运行效果预览,package.json的配置如下:
{
"name": "xxPC版",
"main": "./app/bin/html/main/login.html",
"single-instance": true,
"window": {
/**字符串,设置默认title。*/
"title": "xxPC版",
/**窗口的icon。*/
"icon": "./app/bin/img/xx.png",
/**bool值。是否显示导航栏。*/
"toolbar": false,
/**bool值。是否允许调整窗口大小。*/
"resizable": true,
/**是否全屏*/
"fullscreen": false,
/**是否在win任务栏显示图标*/
"show_in_taskbar": true,
/**bool值。如果设置为false,程序将无边框显示。*/
"frame": false,
/**字符串。窗口打开时的位置,可以设置为“null”、“center”或者“mouse”。*/
"position": "center",
/**主窗口的的宽度。*/
"width": 960,
/**主窗口的的高度。*/
"height": 600,
/**窗口的最小宽度。*/
"min_width": 960,
/**窗口的最小高度。*/
"min_height": 600,
/**bool值,如果设置为false,启动时窗口不可见。*/
"show": true,
/**是否在任务栏显示图标。*/
"show_in_taskbar":true,
/**
* bool值。是否使用kiosk模式。如果使用kiosk模式,
* 应用程序将全屏显示,并且阻止用户离开应用。
* */
"kiosk": false
},
/**webkit设置*/
"webkit": {
/**bool值,是否加载插件,如flash,默认值为false。*/
"plugin": false,
/**bool值,是否加载Java applets,默认为false。*/
"java": false,
/**bool值,是否启用页面缓存,默认为false。*/
"page-cache": true
}
}
包括了基本的配置元素,基本注释都有。主要的就是一个入口main,一个window窗口的定义,在这个项目里面我把所有的静态页面和js都放到APP这个目录下面方便维护随后把app这个目录拖动到nw.exe就可以预览了。
根据文档把该APP目录压缩成App.zip然后改名成App.nw 然后使用copy /b命令把app.nw 和nw.exe组合成一个新的程序。这个程序可以在nw环境下单独运行,不用暴露具体目录给客户,这样下一步的任务就是把这个程序和附属环境一起打包给客户形成安装程序了。
作为一个正式发布的程序,我们可能还需要考虑兼容32位和64位以及古老的Winxp,那么需要在nw.io下载不同的版本,解压以后就可以使用以上方式运行。不过经过测试最高支持xp的nw版本是15.4,之后的32位版本只能支持Win732位版。那么为了维护简单我们只需要考虑在15.4版本打一个32位包来支持目前主要的Windows版本,但是也支持64位版本的打包,这个工作我们可以考虑使用jenkins 使用powershell脚本来完成。
程序有了 环境有了,那么下来就是inno setup的工作了,inno setup主要还是依赖一个配置文件,通过这个配置文件进行打包,以我们的XP打包程序为例
; Script generated by the Inno Setup Script Wizard.
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "xxx"
#define MyAppVerName "xxx"
#define MyAppVersion "xxx"
#define MyAppPublisher "xxx"
#define MyAppURL "http://xxxx/"
#define MyAppExeName "xxxx"
[Setup]
; NOTE: The value of AppId uniquely identifies this application.
; Do not use the same AppId value in installers for other applications.
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
AppId={{CC6D3F8C-5355-4894-ABE2-2B1B6012913D}
AppName={#MyAppName}
AppVersion={#MyAppVersion}
AppVerName={#MyAppName}
AppPublisher={#MyAppPublisher}
AppPublisherURL={#MyAppURL}
AppSupportURL={#MyAppURL}
AppUpdatesURL={#MyAppURL}
DefaultDirName={pf}\{#MyAppVerName}
DisableProgramGroupPage=yes
OutputDir=D:\Output
OutputBaseFilename=setup_x32_V1.1.0.032
SetupIconFile=D:\nwjs-v0.15.4-win-ia32\app\bin\img\ztong.ico
Compression=lzma
SolidCompression=yes
[Languages]
Name: "chinesesimp"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: checkablealone
[Files]
Source: "D:\nwjs-v0.15.4-win-ia32\tong.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "D:\nwjs-v0.15.4-win-ia32\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
Name: "{commonprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
看里面主要的设置[setup][files][icons][runs]主要定义了一些行为和配置,具体的不展开解释,主要修改的配置项是文件来源和输出样式,根据情况对来源目录进行进行筛选和优化,比如locales里面只用保留en-us.pak就可以,删除一些不必要的文件之后基本配置就完成了。
配置文件配置完成之后就可以通过Run执行脚本,然后就可以在output设定的目录下面看到生成的文件了,现在基本设定已经完成需要完善比如程序图标、程序注释等。