今天下午发现了个好玩的东西(node-webkit),这东西有一直是我想实现的功能:使用html编写桌面应用,实现跨平台;

具体实现方法:结合chrome浏览器内核和node.js搭建一个跨平台的应用运行环境(node-webkit is an app runtime based on Chromium and node.js.)

可是这东西好像还没有一个像样的IDE,没有自动打包成应用的功能,虽然手动打包的步骤也不麻烦,但作为程序猿的我,不得不用更“高级”方法实现啦~~O(∩_∩)O哈哈~

先说说手动打包吧:

windows:将你的app文件用zip压缩打包,更名为成app.nw,然后直接将nw.exe和app.nw合并为app.exe即可(注意nw.exe文件夹下的库和nw.pak不能删)。

linux:将你的app文件用zip压缩打包,更名为成app.nw,然后直接将nw和app.nw合并为app即可(注意要给app文件加上运行权限:chmod +x app)

mac:node-webkit.app/Contents/Resources/,将system-info打包成app.nw后,放入该目录即可(还有一些图标文件也要处理,由于我还没在mac平台上测试,就先不详述了,等我上我的黑苹果测试通过了再说吧)

我是在ubuntu上打包的,不喜欢用windows的命令行,在windows下工作的伙伴们可以试试cygwin.当然我不是啥linux大神啦,我是菜鸟级的,之前写过最长的shell代码应该没有超过30行,今天破纪录了,空了好多空行,看了下有90行了,O(∩_∩)O哈哈~废话不多说了,先直接上代码了:

shell#!/bin/bash
# by VellBibi
# init your app info
app_name="vview"
app_dir="/files/Web/Projects/vview/" win_nw_zipfile="/files/Web/Codes/node-webkit-v0.9.2-win-ia32.zip"
linux_nw_tarfile="/files/Web/Codes/node-webkit-v0.9.2-linux-x64.tar.gz"
mac_nw_zipfile="/files/Web/Codes/node-webkit-v0.9.2-osx-ia32.zip" # read pack_flag
w=false && l=false && m=false && o=false
while getopts "wlmo" arg # -w:windows -l:linux -m:mac -o:overwrite
do
case $arg in
w)
w=true
;;
l)
l=true
;;
m)
m=true
;;
o)
o=true
;;
?)
echo "unkonw argument"
exit 1
;;
esac
done if [ ${o} = true ]; then
#remove old file
[ ${w} = true ] && rm -rf ${app_name}_win
[ ${l} = true ] && rm -rf ${app_name}_linux
[ ${m} = true ] && rm -rf ${app_name}_mac
fi # create app.nw file
cd $app_dir
zip app.nw ./*
app_nwfile=${app_dir}/app.nw if [ ${w} = true ]; then
echo "creating windows *.exe file..."
unzip $win_nw_zipfile -d ${app_name}_win && cd ${app_name}_win
cat nw.exe $app_nwfile > ${app_name}.exe
rm -rf nw.exe nwsnapshot.exe credits.html
cd ..
echo "create windows app success!"
else
echo "ignore windows app"
fi if [ ${l} = true ]; then
echo "creating linux execute file..."
tar -xvf $linux_nw_tarfile -C ./
tardir=${linux_nw_tarfile%.tar*} && tardir=${tardir##*/} # rename tardir
mv $tardir ${app_name}_linux && cd ${app_name}_linux
cat nw $app_nwfile > ${app_name} && chmod +x ${app_name}
rm -rf nw nwsnapshot credits.html
cd ..
echo "create linux app success!"
else
echo "ignore linux app"
fi if [ ${m} = true ]; then
echo "creating mac execute file..."
unzip $mac_nw_zipfile -d ${app_name}_mac && cd ${app_name}_mac
if [ -f ${app_dir}/Info.plist ];then
cp ${app_dir}/Info.plist node-webkit.app/Contents/
fi
cp $app_nwfile node-webkit.app/Contents/Resources/
if [ -f ${app_dir}/app.icns ];then
cp ${app_dir}/app.icns node-webkit.app/Contents/Resources/
fi
mv node-webkit.app ${app_name}.app
rm -rf nwsnapshot credits.html
cd ..
echo "create mac app success!"
else
echo "ignore mac app"
fi # remove app.nw
rm -f app.nw

使用方法:

将代码保存到一个.sh文件里并添加运行权限,修改你的app_name(应用名称),app_dir(你的应用所在的文件夹全路径),win_nw_zipfile(你的windows版本node-webkit的zip文件路径),linux_nw_tarfile(你的linux版本node-webkit的tar文件路径),mac_nw_zipfile(你的mac版本node-webkit的zip文件路径)

运行你的.sh文件(如:packer.sh),有四个参数可以给定:

  1. -w : 打包windows下的运行文件到 [your_app_name]_win文件夹下
  2. -l : 打包linux下的运行文件到[your_app_name]_linux文件夹下
  3. -m : 打包mac下的运行文件到[your_app_name]_mac文件夹下
  4. -o : 覆盖之前打包过的文件(没有加这一项的话中间会有提示是否覆盖文件)

如果你想的到windows下和linux下的运行文件,同时覆盖老版本文件:sh packer.sh –wlo

你会发现在你的项目文件夹下多出了两个文件夹:[your_app_name]_win ,[your_app_name]_linux

linux shell 实现node-webkit的自动跨平台打包的更多相关文章

  1. Linux Shell完成Qt程序的自动部署

    #!/bin/sh #取当前脚本的绝对路径 srcDir=$(cd ")";pwd) #设置库所在路径 libDir=${srcDir}"/J1900RunLib/*&q ...

  2. Linux Shell自动交互/人机交互的三种方法

    如果你要学习linux,你可能会遇到Linux Shell自动交互问题,这里将介绍Linux Shell自动交互的解决方法,在这里拿出来和大家分享一下. 一.背景 shell脚本在处理自动循环或大的任 ...

  3. 设置Linux shell超时自动退出

    Linux shell,一般默认情况下是不会超时退出的,但是有的时候我们想要让它在多少分钟后没有操作自动退出终端(听起来有点像windows多少分钟后自动锁屏一样).我们可以通过设置来实现这一功能. ...

  4. Linux Shell常用技巧

    转载自http://www.cnblogs.com/stephen-liu74/ 一.    特殊文件: /dev/null和/dev/tty Linux系统提供了两个对Shell编程非常有用的特殊文 ...

  5. Linux Shell之监测磁盘空间

    Linux Shell之监测磁盘空间 系统管理员的另一个重要任务就是监测系统磁盘的使用情况.不管运行的是简单Linux台式机还是大型的Linux服务器,我们都要知道还有多少空间可以留给应用程序.事实上 ...

  6. Linux之systemd服务配置及自动重启

    layout: post title: Linux之systemd服务配置及自动重启 date: 2019-09-09 tags: linux --- Linux之systemd服务配置及自动重启 0 ...

  7. Linux shell脚本编程(一)

    Linux shell脚本编程: 守护进程,服务进程:启动?开机时自动启动: 交互式进程:shell应用程序 广义:GUI,CLI GUI: CLI: 词法分析:命令,选项,参数 内建命令: 外部命令 ...

  8. Linux Shell 重定向与管道【转帖】

    by 程默 在了解重定向之前,我们先来看看linux 的文件描述符. linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以 ...

  9. Linux Shell数组常用操作详解

    Linux Shell数组常用操作详解 1数组定义: declare -a 数组名 数组名=(元素1 元素2 元素3 ) declare -a array array=( ) 数组用小括号括起,数组元 ...

随机推荐

  1. Android listview的item设定高度

    在item的layout文件中,用android:layout_height设置item的高度.运行,高度设置无效. 解决办法: 给item设定minHeight,即可. -------------- ...

  2. servlet request.getParamter 有时获取参数为null

    他妈的,参数有时可以获取,有时又不行,折腾了好久,把tomcat换成8.0的,之前用apache-tomcat-7.0.67

  3. navigationbar的一些设置记录

    1.设置navigationbar背景颜色 [[UINavigationBar appearance] setBarTintColor:[UIColor blackColor]]; PS:如果颜色不对 ...

  4. Windows 7更改SVN账户密码

    首先说明下我的系统是Windows7 今天更改了SVN账号和密码,然后想要更改一下Eclipse的SVN登录用户名和密码 但是网上找了一大推说什么客户端的,靠净扯淡. 本人亲测最有效的方法是删除C盘下 ...

  5. 在Ubuntu上为Android系统的Application Frameworks层增加硬件访问服务(老罗学习笔记5)

    在数字科技日新月异的今天,软件和硬件的完美结合,造就了智能移动设备的流行.今天大家对iOS和Android系统的趋之若鹜,一定程度上是由于这两个系统上有着丰富多彩的各种应用软件.因此,软件和硬件的关系 ...

  6. lightOJ 1172 Krypton Number System(矩阵+DP)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1172 题意:一个n进制(2<=n<=6)的数字,满足以下条件:(1)至少包 ...

  7. Jquery的.post说解

    Jquery的.post说解(一) 准备工作 ·Customer类   public class Customer {     public int Unid { get; set; }     pu ...

  8. C结构体之位域(位段)

    C结构体之位域(位段) 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位.例如在存放一个开关量时,只有0和1 两种状态, 用一位二进位即可.为了节省存储空间,并使处理简便,C ...

  9. LICEcap 简洁易用的动画屏幕录制软件

    LICEcap 简洁易用的动画屏幕录制软件 LICEcap 捕捉屏幕的区域并保存为gif动画(便于网络发布)或lcf格式(见下). LICEcap 直观易用,功能灵活,支持 Windows 和 OSX ...

  10. 在win7系统下使用TortoiseGit(乌龟git)简单操作Git@OSC

    非常感谢OSC提供了这么好的一个国内的免费的git托管平台.这里简单说下TortoiseGit操作的流程.很傻瓜了 首先你要准备两个软件,分别是msysgit和tortoisegit,乌龟还可以在下载 ...