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

IT技术 javascript command-line-interface pretty-print multiplatform
2021-02-06 21:39:32

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

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

6个回答

首先,选择您最喜欢的基于 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 文件并通过第一步中的 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,那么用文本流运行它应该不会太难。

这些似乎是一个移动的目标。现在jsbeautifier站点上的信息说它是用python编写的。
2021-03-16 21:39:32
cmdline 用户的更新,以下 repo 具有易于安装的独立命令行工具,用于漂亮的打印 js:github.com/einars/js-beautify.git
2021-04-02 21:39:32
你可以很容易地运行它,而无需来自 node 的 java。有一个名为 js-beautify 的 npm 包。安装后,您可以运行命令 js-beautify 将您想要的文件作为参数传递。详情参见:npmjs.com/package/js-beautify
2021-04-02 21:39:32
您提供的链接已损坏,我认为应该是这个链接,jsbeautifier.org
2021-04-10 21:39:32
我是怎么做到的: :~$ 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 和所有参与的人!
2021-04-12 21:39:32

2014 年 4 月更新

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

python风格:

 $ pip install jsbeautifier

NPM 风格:

 $ npm -g install js-beautify

使用它(这将在终端上返回优美的 js 文件,主文件保持不变):

 $ js-beautify file.js

要使更改对文件生效,您应该使用以下命令:

$ js-beautify -r file.js

原答案

添加到@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

新的(替代)

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

  ./jsbeautify somefile.js

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

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

npm 包名为 js-beautify
2021-03-21 21:39:32
或者,如果您更喜欢 python 而不是 v8,现在那里还有一个 python module。
2021-03-22 21:39:32

如果您使用的是 nodejs,请尝试 uglify -js

在 Linux 或 Mac 上,假设您已经安装了 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;}

我可以这样美化它:

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

uglify默认情况下使用空格进行缩进,因此如果我想将 4-space-indentation 转换为制表符,我可以通过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;
}

更新 2016-06-07

看起来 uglify-js 的维护者现在正在开发版本 2,尽管安装是相同的。

uglifyjs -b不仅仅是修复缩进,它还重新排列和重写代码,也许是为了效率。那不是我想要的。我在 Ubuntu 14.04 中使用的是旧版本。
2021-03-19 21:39:32
你能解释一下如何uglifyjs -b重新排列和重写代码吗?
2021-04-06 21:39:32
这是命令行 JavaScript 代码美化器的正确答案。
2021-04-10 21:39:32

在 Ubuntu LTS 上

$ sudo apt install jsbeautifier
$ js-beautify ugly.js > beautiful.js

对于就地美化,以下任何命令:

$ js-beautify -r file.js
$ js-beautify --replace file.js
使用 -r, --replace 就地写入输出,替换输入 js-beautify -r file.js
2021-03-14 21:39:32
目前最好的答案。原地美化使用js-beautify -o file.js file.js
2021-04-13 21:39:32

在控制台中,您可以将艺术风格(又名 AStyle)与--mode=java.
它运行良好,而且免费、开源且跨平台(Linux、Mac OS X、Windows)。