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

gro*_*rom 94 javascript multiplatform pretty-print command-line-interface

我正在编写批处理脚本以美化JavaScript代码.它需要在WindowsLinux上运行.

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

小智 62

首先,选择你最喜欢的基于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
Run Code Online (Sandbox Code Playgroud)

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

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

//new code
print(global.js_beautify(readFile(arguments[0])));
Run Code Online (Sandbox Code Playgroud)

Rhino为javascript提供了一些额外的有用功能,这些功能在浏览器上下文中不一定有意义,但在控制台上下文中也是如此.函数print执行您期望的操作,并打印出一个字符串.函数readFile接受文件路径字符串作为参数,并返回该文件的内容.

你会调用上面的东西

java -cp js.jar org.mozilla.javascript.tools.shell.Main beautify.js file-to-pp.js
Run Code Online (Sandbox Code Playgroud)

你可以在你的Rhino运行脚本中混合搭配Java和Javascript,所以如果你知道一点Java,那么运行text-stream也不会太难.

  • 你给出的链接坏了,我认为应该是这个链接,http://jsbeautifier.org/ (3认同)
  • 我是怎么做到的:〜$ sudo apt-get install libv8-dev libv8-2.2.18:〜$ cd einars-js-beautify-f90ce72/v8:〜$ g ++ -o jsbeautify jsbeautify.cpp -lv8 -Llib -lpthread它只是有效.感谢Einar Lielmanis和所有参与者! (2认同)

era*_*ert 27

如果您正在使用nodejs,请尝试使用uglify -js

在Ubuntu 12.04上,假设您已经安装了nodejs,可以使用以下命令安装uglify:

sudo npm install -g uglify-js

然后得到选项:

uglifyjs -h

所以,如果我有一个如下所示的源文件foo.js:

// foo.js -- minified
function foo(bar,baz){console.log("something something");return true;}
Run Code Online (Sandbox Code Playgroud)

我可以像这样美化它:

uglifyjs foo.js --beautify --output cutefoo.js

uglify默认情况下使用空格进行缩进,所以如果我想将4空格缩进转换为制表符,我可以运行unexpandUbuntu 12.04附带的缩进:

unexpand --tabs=4 cutefoo.js > cuterfoo.js

或者你可以一气呵成:

uglifyjs foo.js --beautify | unexpand --tabs=4 > cutestfoo.js

你可以在这里找到更多关于unexpand的信息

所以在这之后我最终得到一个看起来像这样的文件:

function foo(bar, baz) {
    console.log("something something");
    return true;
}
Run Code Online (Sandbox Code Playgroud)

更新2016-06-07

似乎uglify-js的维护者现在正在使用版本2,尽管安装是相同的.

  • 这是命令行JavaScript代码美化的**正确**答案. (4认同)

knb*_*knb 25

更新2014年4月:

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

Python风格:

 $ pip install jsbeautifier
Run Code Online (Sandbox Code Playgroud)

NPM风格:

 $ npm -g install js-beautify
Run Code Online (Sandbox Code Playgroud)

使用它:

 $ js-beautify file.js
Run Code Online (Sandbox Code Playgroud)

原始答案

添加到@Alan Storm的答案

基于http://jsbeautifier.org/的命令行美化 已经变得更容易使用,因为它现在(或者)基于V8 javascript引擎(c ++代码)而不是rhino(基于java的JS引擎,打包)作为"js.jar").所以你可以使用V8而不是rhino.

如何使用:

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

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

旧(不再有效,jar文件消失了)

  java -jar js.jar  name-of-script.js
Run Code Online (Sandbox Code Playgroud)

新的(替代)

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

  ./jsbeautify somefile.js
Run Code Online (Sandbox Code Playgroud)

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

- 配置为"外部工具"时,在Eclipse中运行良好

  • 或者如果您更喜欢python而不是v8,那么现在还有*一个python模块. (3认同)
  • npm 包名为 js-beautify (2认同)

Ser*_*ndt 7

在Ubuntu 18.04 LTS上

$ sudo apt install jsbeautifier
$ js-beautify ugly.js > beautiful.js
Run Code Online (Sandbox Code Playgroud)


Ale*_*sco 5

您有几种单班轮选择。与 npm 一起使用或与npx独立使用。

半标准

npx semistandard "js/**/*.js" --fix
Run Code Online (Sandbox Code Playgroud)

标准

npx standard "js/**/*.js" --fix
Run Code Online (Sandbox Code Playgroud)

更漂亮

npx prettier --single-quote --write --trailing-comma all "js/**/*.js"
Run Code Online (Sandbox Code Playgroud)