今天下午发现了个好玩的东西(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. 动态调整对话框属性(去掉标题栏,去掉边框,修改类似成Border:NONE样式)(调用ModifyStyle和ModifyStyleEx,然后调用SetWindowPos重新显示)

    // 动态修改对话框属性,去掉对话框标题栏,设置Border为NONE属性. if(dlg.GetSafeHwnd()) { dlg.ModifyStyle(WS_CAPTION, 0); // 去掉 ...

  2. java:线程的简单控制方法

    中断线程方法 休眠:sleep(); 主动让出cpu:yield(); 设置线程优先级: 取值:getPriority(); 设置:setPriority(..); MAX_PRIORITY最大优先级 ...

  3. PowerDesigner连接Oracle数据库建表序列号实现自动增长

    原文:PowerDesigner连接Oracle数据库建表序列号实现自动增长 创建表就不说了.下面开始介绍设置自动增长列. 1 在表视图的列上创建.双击表视图,打开table properties — ...

  4. sudo和su

    su命令就是切换用户的工具 sudo 授权许可使用的su,也是受限制的su 1. sudo 的适用条件 由于su 对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系 ...

  5. Android应用开发学习笔记之Intent

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Intent是什么呢?来看Android官网上的定义: An intent is an abstractdescri ...

  6. BZOJ 2844 albus就是要第一个出场(高斯消元)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2844 题意: 给出一个长度为n的正整数数列A.每次选出A的一个子集进行抑或(空集抑或值为 ...

  7. C#将HTML导出Excel

    首先这个 不能用ajax 操作,不过 我现在讲的 这个方法和ajax 的效果一样. 你在你需要导出的页面写个方法 function DaoChu () { location.href = " ...

  8. bzoj1913

    这是一道好题,要求每个三点圆覆盖的点数和 我们可以算四边形的贡献,四边形显然分成两种:凸四边形和凹四边形 显然,凹四边形的覆盖只可能是三个点组成三角形包含另一个点,所以贡献是1 凸四边形,其最小圆覆盖 ...

  9. HDU 3492 (直线与所有线段相交) Segment

    题意: 给出n个线段,判断是否存在一条直线使得所有线段在直线上的射影的交非空. 分析: 如果我们找到一条与所有线段相交的直线,然后做一条与该直线垂直的直线,这些线段在直线上的射影就一定包含这个垂足. ...

  10. UVa 699 The Falling Leaves

    题意:给出按先序输入的一颗二叉树,分别求出从左到右的相同横坐标上的节点的权值之和 递归建树,然后用sum数组分别统计每一个横坐标上的权值之和 感觉建树都在递归递归递归= =慢慢理解吧 #include ...