在node-webkit中,有没有办法找到当前应用程序的路径?在node.js中,您可以使用__dirname查找当前应用程序的路径,但在node-webkit中,变量__dirname似乎未定义.
以下node.js脚本正确打印文件路径:
console.log(__dirname)
以下node-webkit脚本无法正确打印文件路径:
<script type = "text/javascript">
alert(__dirname);
</script>
Run Code Online (Sandbox Code Playgroud)
在node-webkit中找到当前应用程序路径的正确方法是什么?
我正在寻找一种方法来引用/"自定义"网址.我使用的东西就像本地浏览器和/路径引用/ unix路径(是的,os根路径!),这绝对不是我放置文件的地方.
虽然我可以在html中解决这个问题,<base>我不明白这是否适用于CSS url(),或者是否有类似的东西允许我指定完整的URL.
我现在对任何解决方案持开放态度,即使使用SASS也会使用一些自定义函数来重写任何url,并用完整路径替换它.
为了澄清我所问的更多内容,这里是我的问题的一个例子以及我想如何解决它:
/mnt/projects/web/myproject/index.html
...
<base href="/mnt/projects/web/myproject/" />
...
/mnt/projects/web/myproject/style.scss
$base_url: "/path_to_root_folder_dinamically_fetched_on_client_pc/";
body
{
background-image: url("#{$base_url}mydir/myimage.png");
}
Run Code Online (Sandbox Code Playgroud)
最好的选择显然是url(/mydir/myimage.png)有效的,但通过网络阅读,我明白它没有.
谢谢你的任何建议.
更新1:
对不起,答案都很好但没有上下文,很难回答这个问题.让我解释一下:我正在使用一个软件(node-webkit)在本地运行一个"网站"(好吧,它是一个应用程序).这或多或少是具有一些附加功能的自定义铬实例.
最大的问题是node-webkit使用file:///协议,所以是的,文件协议IS的根路径实际上是你的操作系统的根,C:/ on windows,/在unix系统上,这不是直接问题因为这是一个本地应用程序(用户必须以某种方式安装它,我已经有权访问这个系统).
第二个问题是,当您将应用程序打包到单个文件中时,当用户运行它时,它会在临时目录中解压缩,以通过file:///协议实际运行网站,例如/ tmp/randomnumber/index html的
因此,使用/它不是一个有效的选项,但是因为我的样式表足够传播(它是一个复杂的应用程序,我有类似layouts/something.css main.css和类似的东西),这是一个很大的问题,不得不一直重写../为每个网址.
我有什么选择?在这种情况下,javascript选项并不像你想象的那么糟糕.另一个想法是运行一个非常小的网络服务器,它应该只提供静态的东西,但这需要是可移植的,跨平台的,不需要安装.
我认为用基本的html和CSS解决这个问题是可能的,但它看起来并非如此,虽然我可以通过javascript添加"base"标签,但CSS并没有类似的东西.
使用Node-Webkit,我正在尝试从web worker js文件中创建和写入用户定义的本地文件夹中的文本文件.我试着用requestFileSystemSync(),.root.getFile(),.createWriter()等,但我不知道在哪里这个文件保存(可以将其写入到一个定义的本地文件夹,或者是"沙箱",以一种特殊的文件夹位置?).
任何人都可以提供有关我从Web worker到任意本地文件夹位置创建文本文件的最佳方法的建议吗?也就是说,在沙盒文件系统之外的本地文件系统中?
谢谢.
我有一个项目,我使用node-webkit.node-webkit允许npm包用于开发桌面应用程序.我利用grunt来构建我的应用程序.
我的文件夹结构目前看起来像这样:
project root
node_modules/ (1)
package.json (1)
App/
node_modules/ (2)
package.json (2)
bower.json
bower_components/
...
controllers/
filters/
...
app.js
Run Code Online (Sandbox Code Playgroud)
应用程序本身的npm依赖项保存在App文件夹中,但构建项目的dev依赖项与应用程序源代码无关,因此我将它们保存在根文件夹内的node_modules(1)中.我也知道在package.json文件中,可以表达依赖关系和dev依赖关系,正是出于这个原因.我宁愿在根目录中有一个表示所有依赖项的package.json文件,包括dev依赖项,但我宁愿在文件夹级别上分离这些依赖项.
出现两个问题:
这是组织我的npm依赖项的好方法吗?如果是的话,太棒了?如果不是,我期望:
什么是组织我的依赖项的更好方法?是否可以指定dev依赖项进入文件夹a,"常规"依赖项进入文件夹b?如果是这样,我该怎么做?
如果有人想知道,这是我正在谈论的项目:
https://github.com/michahell/pinbored-webkit
[为了清晰起见,更新了包含app.js的文件夹结构]
我知道可以为node-webkit应用程序创建一个托盘图标,如下所示:
var tray = new gui.Tray({ title: 'Tray', icon: 'img/icon.png' });
Run Code Online (Sandbox Code Playgroud)
但在Ubuntu上,标题将不会显示.反正有没有实现这个目标?
我想使用托盘图标来显示动态信息,通过更改图标本身会非常烦人.
如果有办法在那里实现它,我也可以使用电子.
编辑:
对于那些有兴趣参与的人:我在github上为电子和铬创造了一些问题.
所以,我有一个Web应用程序,它生成大量的颜色信息缓冲区,我想发送给在本地网络中另一台机器上运行的节点应用程序.Web套接字对我来说似乎不够快.我当时希望使用UDP,似乎WebRTC是从浏览器中实现这一目标的唯一方法.值得注意的是,WebRTC只是PEER到PEER(浏览器到浏览器).我想,我可以使用node webkit来模仿我的另一个"PEER".在我的节点应用程序中,我可以处理"信令"并让它自己设置在我的网络应用程序的RTCPeerConnection中.因此,我可以将我的数据从我的网络应用程序发送到我的节点应用程序(本地网络).在某些情况下,我有一台计算机运行本机软件来驱动灯具,我想使用网络应用程序来控制灯光.
为了解决问题,如何从浏览器到节点webkit应用程序进行RTCPeerConnection?
任何帮助将非常感谢.
谢谢!
-Jake
我在使用node-webkit的简单示例中遇到以下错误:
Uncaught AssertionError: path must be a string
Run Code Online (Sandbox Code Playgroud)
的index.html
//base.js
require(["test"], function(test) {
test.init();
});
//test.js
define(function(){
window.c = window.console;
return {
init: function(){
c.log('test.init');
},
destroy: function(){
c.log('test.destroy');
}
}
});
Run Code Online (Sandbox Code Playgroud) 我正在使用nodejs和express开发一个应用程序.
我想将它导出为带有node-webkit的包.
如何启动服务器并使用它运行应用程序?
我们使用node webkit开发了一个桌面应用程序,它运行正常.我唯一的疑问是,我们是否需要对作为节点js服务器组件的一部分编写的.js文件进行缩小.我们通常在主要为UI视图编写的javascript上执行缩小,以减少在加载HTML的相关javascripts期间的有效负载,并且还隐藏脚本中的编码信息以使其难以修改.
因此,我们需要在节点js服务器端.js文件上执行类似的连接和缩小过程,然后将节点webkit可执行文件共享给Customer.如果没有节点js文件的缩小,应用程序就可以正常工作.
所以,回到我的问题 - 我们是否需要为节点js应用程序执行javascripts连接和缩小?
我有一个Node Webkit桌面应用程序,需要从服务器下载文件并在用户离线时本地保存.当我知道文件名是什么时,我可以下载并保存文件,但是如何读取服务器上目录的内容以便下载每个文件?
function cacheFiles(filelink, filepath, cb) {
var path_array = filelink.split("/");
var foldername = path_array[path_array.length - 2]
//create new folder for locally html files
var newdir = filepath + '/' + foldername;
if (fs.existsSync(newdir)){
alert('file already exists, cannot cache this file.');
} else {
fs.mkdirSync(newdir);
}
//download and save index.html - THIS WORKS
var indexfile = fs.createWriteStream(newdir+'/index.html');
var request = http.get(filelink, function(response) {
response.pipe(indexfile);
indexfile.on('finish', function() {
indexfile.close(cb);
});
});
//read contents of data folder - THIS DOESN'T WORK
var …Run Code Online (Sandbox Code Playgroud)