如何使用命令行美化JavaScript代码?

时间:2020-03-05 18:41:19  来源:igfitidea点击:

我正在编写批处理脚本,以美化JavaScript代码。它需要同时在Windows和Linux上运行。

如何使用命令行工具美化JavaScript代码?

解决方案

回答

首先,选择我们最喜欢的基于Javascript的Pretty Print / Beautifier。我更喜欢http://jsbeautifier.org/上的那个,因为这是我首先发现的。下载其文件https://github.com/beautify-web/js-beautify/blob/master/js/lib/beautify.js

其次,下载并安装Mozilla组的基于Java的Javascript引擎Rhino。 "安装"有点误导;下载zip文件,解压缩所有内容,然后将js.jar放入Java类路径(或者OS X上的Library / Java / Extensions)。然后,我们可以使用与此类似的调用来运行脚本

java -cp js.jar org.mozilla.javascript.tools.shell.Main name-of-script.js

使用第1步中的Pretty Print / Beautifier编写一个小的Shell脚本,该脚本将读取javascript文件,并通过第1步中的Pretty Print / Beautifier运行它。例如

//original code    
(function() { ... js_beautify code ... }());

//new code
print(global.js_beautify(readFile(arguments[0])));

Rhino为javascript提供了一些额外的有用功能,这些功能不一定在浏览器上下文中有意义,而在控制台上下文中有用。函数print可以实现我们所期望的,并打印出一个字符串。函数readFile接受文件路径字符串作为参数,并返回该文件的内容。

我们将调用上面的类似

java -cp js.jar org.mozilla.javascript.tools.shell.Main beautify.js file-to-pp.js

我们可以在Rhino运行脚本中混合并匹配Java和Javascript,因此,如果我们了解一点Java,也可以通过文本流使它运行起来并不难。

回答

2014年4月更新:

自从我在2010年回答这个问题以来,美化工具已被重写。现在那里有一个python模块,一个用于nodejs的npm包,而jar文件不见了。请阅读github.com上的项目页面。

Python样式:

$ pip install jsbeautifier

NPM样式:

$ npm -g install js-beautify

使用它:

$ js-beautify file.js

原始答案

添加到@Alan Storm的答案

基于http://jsbeautifier.org/的命令行美化器变得更易于使用,因为它现在(替代地)基于V8 javascript引擎(c ++代码)而不是基于rhino(基于Java的JS引擎)打包作为" js.jar")。因此,我们可以使用V8代替犀牛。

如何使用:

从下载jsbeautifier.org zip文件
http://github.com/einars/js-beautify/zipball/master

(这是链接到诸如http://download.github.com/einars-js-beautify-10384df.zip之类的zip文件的下载URL)

旧的(不再起作用,jar文件消失了)

java -jar js.jar  name-of-script.js

新(替代)

从svn安装/编译v8 lib,请参见上述zip文件中的v8 / README.txt

./jsbeautify somefile.js

-与Rhino版本的命令行选项略有不同,

-并且在配置为"外部工具"时在Eclipse中效果很好

回答

我写了一篇文章,解释如何在5分钟内构建用JavaScript实现的命令行JavaScript美化器。 YMMV。

Download the latest stable Rhino and unpack it somewhere, e.g. ~/dev/javascript/rhino
  Download beautify.js which is referenced from aforementioned jsbeautifier.org then copy it somewhere, e.g. ~/dev/javascript/bin/cli-beautifier.js
  Add this at the end of beautify.js (using some additional top-level properties to JavaScript):

// Run the beautifier on the file passed as the first argument.
print( j23s_beautify( readFile( arguments[0] )));

  Copy-paste the following code in an executable file, e.g. ~/dev/javascript/bin/jsbeautifier.sh:

#!/bin/sh
java -cp ~/dev/javascript/rhino/js.jar org.mozilla.javascript.tools.shell.Main ~/dev/web/javascript/bin/cli-beautifier.js $*

  (optional) Add the folder with jsbeautifier.js to PATH or moving to some folder already there.