JavaScript用于命令行实用程序

6

如果需要编写命令行实用程序来执行常见任务,例如将文件上传到远程FTP站点,从远程MySQL数据库下载数据等,是否可以使用JavaScript?我知道有JavaScript解释器可以从命令行运行,但是是否有像Java一样的库用于FTP和数据库访问?如果有,最好的查找位置是什么?(带有JavaScript关键字的Google搜索似乎总是返回许多特定于浏览器的内容。)

还有一种方法可以在Windows上打包JavaScript程序为独立可执行文件吗?

更新:我已经决定Python是这种工作的更好工具,但是对于原始问题的答案仍然很好。

6个回答

8

独立可执行文件?

从你提出的问题来看,我不确定你是否知道Windows中包含的Windows脚本主机(WSH),它允许你从命令行运行.js文件。你的JavaScript不会成为可执行文件,它仍然是一个脚本,一个文本文件。该脚本在由WSH提供的cscript.exe中运行。无需编译。也许你已经知道了这一点。

我在Windows上使用JavaScript来实现各种实用程序。

我认为你对库的可用性的直觉是正确的。你有点需要自己找到所有这些东西。虽然一旦找到它们,将JavaScript库打包为COM组件并允许从任何地方重复使用并不难。请参见此处一个将Google Diff / Patch / Match JavaScript库打包为COM的示例。

补充:一旦代码位于COM中,任何在计算机上运行的JavaScript都可以使用它。以下是可用于在WSH中运行的JavaScript脚本的COM对象的一些示例:


7
你可以使用Rhino将Javascript编译成Java字节码,从而访问所有Java库。
或者你可以使用JScript.net,并访问.net库。.net包括一个生成exe文件的jsc.exe。
这两种方法都需要相应的框架安装才能运行。

6

Node.js 是目前运行非浏览器 JavaScript 最好的环境。我曾经使用过 Rhino 和 SpiderMonkey,但是从基础知识如错误处理到社区使用工具的规模,它们和 Node 之间有着明显的差异。Node 被定位为“服务器端”JavaScript,用于在 JavaScript 中构建服务器应用程序,这方面表现非常出色。但同样适用于构建命令行工具。

NPM 包管理器(随 Node 捆绑)提供了一个很好的全局目录来查找和安装包。它的功能比其他语言的等效工具(如 PECL/Pear/CPAN 等)要好得多。其中一些高质量的工具,例如JSHintJade 模板语言和 CoffeeScript 编译器,都已经通过 NPM/Node 提供了支持。

npm install -g jshint, coffee-script, jade
jshint my_code.js
jade < my.jade > my.html

对于参数解析,有像commander.js这样的软件包。我目前在我的underscore-cli命令行工具中使用了一个经过大量扩展的Commander版本。
如果要处理JSON或进行命令行JS工作(类似于“perl-pe”),请查看underscore-cli-它是一个非常强大的工具,可用于处理JSON数据、处理下划线模板以及从命令行运行JS表达式。我将其用于1001种不同的事情,否则这些事情将会非常麻烦。

你为什么认为npm比cpan更好? - Gringo Suave
具体到CPAN,一个抱怨是它要求我在使用之前走过15个“设置”步骤... 真是愚蠢。从可用性/CLI角度来看,npm更加令人愉悦。至于更实质性的哲学差异... npm处理递归依赖关系的方式有很大不同。对于PERL(以及Ruby和大多数其他脚本语言),你有一个全局模块路径,如果它们各自需要不同版本的模块C,则使用模块A和B会变得棘手。npm处理这个问题很好,尽管每次安装模块时都会下载完整的传递依赖项闭包(也很愚蠢)。 - Dave Dopson
好的,谢谢提供背景信息。我只使用过Python pip,npm只用过一两次。然而,cpan在Slashdot社区中一直备受推崇。 - Gringo Suave
npm相对于CPAN有什么优势呢?npmjs.org是个混乱的网站(尝试挑选一个CSV模块 - 你会得到大量的搜索结果,其中80%都与主题不相关或者糟糕),因为它没有评级或评论功能。我在GitHub上提交了一个关于这个问题的[issue](https://github.com/isaacs/npm-www/issues/298)。针对你对安装步骤的不满意:使用[cpanm](http://cpanratings.perl.org/dist/App-cpanminus)。无需设置。 - Dan Dascalescu

4
Rhino是与JDK 1.6捆绑在一起的,bin目录中的jrunscript.exe将允许您运行任何JavaScript。由于它在Java下运行,因此您可以访问可能拥有的任何Java库。
我们广泛地从命令行使用它。这方面非常出色。

1

jslibs 是一个很好的独立 JavaScript 运行时,支持许多第三方开源库,如 zlib、SQLite、NSPR、libiconv、libTomCrypt、OpenGL 等。


1
一种方法是将这些工具编写为AIR应用程序-它们可以用JavaScript编写,不需要有UI界面。它们可以访问命令行,并且有现有的ActionScript 3库可以处理FTP等。在AIR应用程序中,可以从JS调用这些ActionScript API。AIR应用程序还可以访问sqlite数据库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接