使用node-webkit实现打包工具的小结
2014-01-20 14:48
246 查看
之前一直使用的hta在开发工具,最近转到node-webkit上了,对比一下二者的优劣势。hta单个文件,体积较小,但有兼容性的问题(兼容ie6、7、8就行了,也还好),node-webkit使用webkit内核,可以直接使用html5、css3的相关特性,比如圆角、渐变等,比较方便,界面炫一些,但在windows下最大的问题就是体积较大。
还有就是node-webkit在windows下进行资源的copy时,容易报error但它是一个空的Error对象,里面并没有errCode和它的信号相关信息,hta没有这个问题很稳定。不过读写文件和网络请求处理上面来讲,还是node.js方便,一行代码就能解决战斗,所以尽管体积偏大,我还是倾向于node-webkit进行开发。
下面来总结一下遇到的坑:
1、编码问题
一个是使用child_process调用dos相关的命令时,得到的输出有中文全部就乱码了,例如调用devenv.com编译项目,除英文字符外其它几乎都是乱码,很不好判断到底编译项目成功还是失败了
二是,使用Notepad2默认创建的txt文件,它的编码居然是utf8+,带BOM的,太坑了,获取文件内容时它的头部居然带一个“?”,结果程序一跑,alert也没发现啥问题,ctrl + c、ctrl + v出来的时候才发现里面带一个?
2、exec方法的回调函数中,需要对error进行进一步的判断,仅判断error是否为null容易误判,因为实际我比较复制后的文件跟源文件夹大小和文件数量是一致的。
[/code]
不然,仅用if(error) {}进行判定, 很容易程序中断,后续函数无法继续运行。我这个是在copy大约35M左右的文件夹内容时遇到的,可能是时间过长导致的,待验证…
3、使用request模块时,注意需要保存cookie;
比如我先登录OA,然后调用OA的接口,如果不保存cookie那么调用就会失败。而hat就是一个浏览器进程,所以它不存在这个问题。使用下面的代码解决它:
[/code]
4、svn相关注意事项
svn需要先update,然后再add,最后才是commit,这三步都是程序在进行处理,但顺序不能乱,不然就game over了。其中如果你所使用的svn服务器是需要添加注释的,在使用程序自动处理时别忘记了-m参数,不然也是提交失败的~ ~,并且你还拿不到出错信息(就一个errCode和信号id还有是否被kill掉的相关信息)
5、node-webkit安装xml2json模块还安装不上,没办法改用xml2js了。这个没找到同步方法,先监听它的end方法然后再做处理,比较蛋疼
6、使用上传组件input file时,需要注意它的属性,根据自己的需要使用
[/code]
其中ebkitdirectory跟nwdirectory效果是一样的,其它几项相信看到描述也大概知道什么意见了
暂时记录这么多,下次再用它开发工具应该不会再遇到这么多坑了…
还有就是node-webkit在windows下进行资源的copy时,容易报error但它是一个空的Error对象,里面并没有errCode和它的信号相关信息,hta没有这个问题很稳定。不过读写文件和网络请求处理上面来讲,还是node.js方便,一行代码就能解决战斗,所以尽管体积偏大,我还是倾向于node-webkit进行开发。
下面来总结一下遇到的坑:
1、编码问题
一个是使用child_process调用dos相关的命令时,得到的输出有中文全部就乱码了,例如调用devenv.com编译项目,除英文字符外其它几乎都是乱码,很不好判断到底编译项目成功还是失败了
二是,使用Notepad2默认创建的txt文件,它的编码居然是utf8+,带BOM的,太坑了,获取文件内容时它的头部居然带一个“?”,结果程序一跑,alert也没发现啥问题,ctrl + c、ctrl + v出来的时候才发现里面带一个?
2、exec方法的回调函数中,需要对error进行进一步的判断,仅判断error是否为null容易误判,因为实际我比较复制后的文件跟源文件夹大小和文件数量是一致的。
[code]process.exec(command_str, function(error, stdout, stderr) { console.log("copy PALACE_CARD_M_RES error : ", error); if (error && error.code) {//code、signal showMessage("文件复制失败," + JSON.stringify(error)); return ; } showMessage("PALACE_CARD_M_RES文件夹复制成功"); //todo.. });
[/code]
不然,仅用if(error) {}进行判定, 很容易程序中断,后续函数无法继续运行。我这个是在copy大约35M左右的文件夹内容时遇到的,可能是时间过长导致的,待验证…
3、使用request模块时,注意需要保存cookie;
比如我先登录OA,然后调用OA的接口,如果不保存cookie那么调用就会失败。而hat就是一个浏览器进程,所以它不存在这个问题。使用下面的代码解决它:
[code]request = request.defaults({jar: true});
[/code]
4、svn相关注意事项
svn需要先update,然后再add,最后才是commit,这三步都是程序在进行处理,但顺序不能乱,不然就game over了。其中如果你所使用的svn服务器是需要添加注释的,在使用程序自动处理时别忘记了-m参数,不然也是提交失败的~ ~,并且你还拿不到出错信息(就一个errCode和信号id还有是否被kill掉的相关信息)
5、node-webkit安装xml2json模块还安装不上,没办法改用xml2js了。这个没找到同步方法,先监听它的end方法然后再做处理,比较蛋疼
6、使用上传组件input file时,需要注意它的属性,根据自己的需要使用
[code]<input type="file" multiple /> <input type="file" accept=".doc,.docx,.xml,application/msword"> <input type="file" webkitdirectory /> <input type="file" nwdirectory /> <input type="file" nwsaveas /> <input type="file" nwsaveas="filename.txt" />
[/code]
其中ebkitdirectory跟nwdirectory效果是一样的,其它几项相信看到描述也大概知道什么意见了
暂时记录这么多,下次再用它开发工具应该不会再遇到这么多坑了…
相关文章推荐
- 关于Node.js的本地应用打包工具node-webkit
- 使用node.js的http模块实现爬虫小工具
- 基于node打包可执行文件工具_Pkg使用心得分享
- IOS使用第三方工具(RegexKitLite)实现正则表达式小结
- 使用ANT+Umeng工具实现多渠道打包编译APK
- 使用Maven的assembly插件实现自定义打包
- Qt程序打包发布方法(使用官方提供的windeployqt工具)
- node.js中使用node-schedule实现定时任务实例
- 使用pkg打包Node.js应用的方法步骤
- 使用MATLAB编译器实现混编(小结)
- 用node-webkit把web应用打包成桌面应用
- 第8章-使用Express.js和Hapi构建Node.js-REST-API服务-8.5.小结
- Node.js使用递归实现遍历文件夹中所有文件
- java使用Apache工具集实现ftp文件传输
- Android Library Project 的使用小结以及脚本打包事项
- 使用maven工具对maven项目进行打包所出现的问题
- MVC框架实现10---Smart框架打包、下载、使用
- 使用-webkit-box-flex 实现 一半文本显示完全 一半文本宽度自适应
- node.js之打包工具webpack
- Qt程序打包发布方法(使用官方提供的windeployqt工具)