我有一个Node web应用程序,我想将其打包为独立的跨平台应用程序;有点像Cordova,除了它仍然是幕后的Node,它不适用于移动设备。我希望能够运行可执行文件,并在某种本地沙箱中运行Web,而不必在默认浏览器中访问。
是否已有工具可以执行此操作?我在谷歌上搜索过,但是因为这是我第一次尝试这个,也许我只是没有使用正确的搜索条件;我一直在使用“沙盒”这个词,但我不确定这是什么意思,因为沙盒似乎主要是关于安全性,而不是关于打包网络应用程序。
我们正在组建一个node-inspector样式的节点调试器,但与node-inspector不同,我们不使用Chromium的Blink调试器,我们不希望应用程序必须在浏览器,它只会将用于调试Web应用程序的用户与其他Web应用程序混淆。
如果我们可以将应用程序打包为已安装的应用程序,那么调试过程对用户来说似乎更为直接。由于我们不使用Blink,因此我们也不会依赖原生的Chrome功能调用,这似乎会破坏节点检查员的每个其他Chrome版本。所以,如果我能找到合适的工具来实现它,我相信这应该是可行的。
总结:
答案 0 :(得分:1)
经过一天的搜索,我终于发现了node-webkit。该项目将节点运行时与webkit运行时混合在一起,并将它们放在同一个线程中。您可以在前端JavaScript中使用节点的功能,因为该应用程序是本地打包的应用程序。
唯一的区别是,不是启动节点脚本来托管Web应用程序,而是将package.json指向index.html文件,您希望它在启动时托管。从那里你可以使用node-webkit API打开其他窗口等。它很棒!
让演示运行很容易。这是我如何制作一个小型演示,它读取我code
目录中的所有文件和目录,我保留所有开发项目并将其显示在页面上的<ul>
元素中。
// node-webkit-playground/index.html
<!DOCTYPE html>
<html>
<head>
<title>node-webkit-playground</title>
<style type="text/css">
body {
background-color: #000;
color: #0f0;
}
</style>
<script>
var $ = require('jquery');
var fs = require('fs');
var path = require('path');
var downloadedFiles = fs.readdirSync('/Users/chev/code');
$(function () {
var $fileList = $('#fileList');
downloadedFiles.forEach(function (file) {
var fileName = path.basename(file);
$('<li>').text(fileName).appendTo($fileList);
});
})
</script>
</head>
<body>
<ul id="fileList">
</ul>
</body>
</html>
// node-webkit-playground/package.json
{
"name": "node-webkit-playground",
"main": "index.html",
"window": {
"toolbar": false,
"frame": true,
"width": 800,
"height": 500,
"position": "mouse",
"min_width": 400,
"min_height": 200,
"max_width": 800,
"max_height": 800
}
}
然后从我的项目文件夹中:
从npm安装jquery并全局安装nodewebkit。
$ npm install jquery
$ npm install -g nodewebkit
创建项目的zip存档,但将扩展名重命名为.nw
。
$ zip -r app.nw *
使用node-webkit运行该文件。
$ nodewebkit app.nw
之后它super easy为OSX打包.app
,为Windows打包.exe
,为Linux打包.deb
。
我相信这将是我们正在构建的调试工具的完美设置。