歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> SHELL編程 >> Linux shell 實現node-webkit的自動跨平台打包

Linux shell 實現node-webkit的自動跨平台打包

日期:2017/3/1 9:47:26   编辑:SHELL編程

今天下午發現了個好玩的東西(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哈哈~廢話不多說了,先直接上代碼了:

#!/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

Node.js 的詳細介紹:請點這裡
Node.js 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved