2011-06-06 18:33:45 +00:00
# JS Beautifier
2015-01-30 02:50:17 +00:00
[![Build Status ](https://img.shields.io/travis/beautify-web/js-beautify/master.svg )](http://travis-ci.org/beautify-web/js-beautify)
[![NPM version ](https://img.shields.io/npm/v/js-beautify.svg )](https://www.npmjs.com/package/js-beautify)
[![Download stats ](https://img.shields.io/npm/dm/js-beautify.svg )](https://www.npmjs.com/package/js-beautify)
2015-06-18 18:52:46 +00:00
[![Join the chat at https://gitter.im/beautify-web/js-beautify ](https://badges.gitter.im/Join%20Chat.svg )](https://gitter.im/beautify-web/js-beautify?utm_source=badge& utm_medium=badge& utm_campaign=pr-badge& utm_content=badge)
2015-01-30 02:50:17 +00:00
2015-04-08 19:07:17 +00:00
[![NPM stats ](https://nodei.co/npm/js-beautify.svg?downloadRank=true&downloads=true )](https://www.npmjs.org/package/js-beautify)
2011-06-06 18:33:45 +00:00
This little beautifier will reformat and reindent bookmarklets, ugly
JavaScript, unpack scripts packed by Dean Edward’ s popular packer,
as well as deobfuscate scripts processed by
[javascriptobfuscator.com ](http://javascriptobfuscator.com/ ).
2013-04-08 04:36:59 +00:00
# Usage
2013-04-19 07:28:10 +00:00
You can beautify javascript using JS Beautifier in your web browser, or on the command-line using node.js or python.
2013-04-08 04:36:59 +00:00
2013-04-19 07:28:10 +00:00
## Web Browser
Open [jsbeautifier.org ](http://jsbeautifier.org/ ). Options are available via the UI.
2012-07-16 18:05:11 +00:00
2013-04-08 04:36:59 +00:00
## Python
To beautify using python:
2012-07-16 18:05:11 +00:00
2013-04-08 04:36:59 +00:00
```bash
$ pip install jsbeautifier
2013-04-19 07:28:10 +00:00
$ js-beautify file.js
2013-04-08 04:36:59 +00:00
```
2011-06-06 18:33:45 +00:00
2013-04-08 04:36:59 +00:00
Beautified output goes to `stdout` .
2011-09-05 12:48:27 +00:00
To use `jsbeautifier` as a library is simple:
2011-06-06 18:33:45 +00:00
``` python
import jsbeautifier
res = jsbeautifier.beautify('your javascript string')
res = jsbeautifier.beautify_file('some_file.js')
```
...or, to specify some options:
``` python
opts = jsbeautifier.default_options()
opts.indent_size = 2
res = jsbeautifier.beautify('some javascript', opts)
```
2013-04-08 04:36:59 +00:00
## JavaScript
2012-07-16 18:05:11 +00:00
2012-07-16 21:18:35 +00:00
As an alternative to the Python script, you may install the NPM package `js-beautify` . When installed globally, it provides an executable `js-beautify` script. As with the Python script, the beautified result is sent to `stdout` unless otherwise configured.
2012-07-16 18:05:11 +00:00
2012-07-16 21:37:24 +00:00
```bash
$ npm -g install js-beautify
$ js-beautify foo.js
2012-07-16 18:05:11 +00:00
```
2012-07-16 21:37:24 +00:00
You can also use `js-beautify` as a `node` library (install locally, the `npm` default):
```bash
$ npm install js-beautify
```
2012-07-16 18:05:11 +00:00
```js
var beautify = require('js-beautify').js_beautify,
fs = require('fs');
fs.readFile('foo.js', 'utf8', function (err, data) {
if (err) {
throw err;
}
console.log(beautify(data, { indent_size: 2 }));
});
```
2013-04-08 04:36:59 +00:00
## Options
2012-07-16 18:05:11 +00:00
These are the command-line flags for both Python and JS scripts:
2012-12-06 22:02:05 +00:00
```text
2012-12-06 21:56:34 +00:00
CLI Options:
2013-06-06 18:47:04 +00:00
-f, --file Input file(s) (Pass '-' for stdin)
-r, --replace Write output in-place, replacing input
-o, --outfile Write output to file (default stdout)
--config Path to config file
--type [js|css|html] ["js"]
-q, --quiet Suppress logging to stdout
-h, --help Show this help
-v, --version Show the version
2012-12-06 21:56:34 +00:00
Beautifier Options:
2014-06-11 00:57:33 +00:00
-s, --indent-size Indentation size [4]
-c, --indent-char Indentation character [" "]
2015-03-23 22:11:19 +00:00
-e, --eol character(s) to use as line terminators. (default newline - "\\n")');
2014-06-11 00:57:33 +00:00
-l, --indent-level Initial indentation level [0]
-t, --indent-with-tabs Indent with tabs, overrides -s and -c
-p, --preserve-newlines Preserve line-breaks (--no-preserve-newlines disables)
-m, --max-preserve-newlines Number of line-breaks to be preserved in one chunk [10]
-P, --space-in-paren Add padding spaces within paren, ie. f( a, b )
-j, --jslint-happy Enable jslint-stricter mode
2014-11-10 02:46:26 +00:00
-a, --space-after-anon-function Add a space before an anonymous function's parens, ie. function ()
2014-10-07 15:59:25 +00:00
-b, --brace-style [collapse|expand|end-expand|none] ["collapse"]
2014-06-11 00:57:33 +00:00
-B, --break-chained-methods Break chained method calls across subsequent lines
-k, --keep-array-indentation Preserve array indentation
-x, --unescape-strings Decode printable characters encoded in xNN notation
-w, --wrap-line-length Wrap lines at next opportunity after N characters [0]
-X, --e4x Pass E4X xml literals through untouched
2014-10-01 00:45:10 +00:00
-n, --end-with-newline End output with newline
-C, --comma-first Put commas at the beginning of new line instead of end
2014-06-11 00:57:33 +00:00
--good-stuff Warm the cockles of Crockford's heart
2012-12-06 21:56:34 +00:00
```
These largely correspond to the underscored option keys for both library interfaces, which have these defaults:
```json
{
"indent_size": 4,
"indent_char": " ",
2015-03-23 22:11:19 +00:00
"eol": "\n",
2012-12-06 21:56:34 +00:00
"indent_level": 0,
"indent_with_tabs": false,
"preserve_newlines": true,
"max_preserve_newlines": 10,
"jslint_happy": false,
2014-06-11 00:57:33 +00:00
"space_after_anon_function": false,
2012-12-06 21:56:34 +00:00
"brace_style": "collapse",
"keep_array_indentation": false,
"keep_function_indentation": false,
"space_before_conditional": true,
"break_chained_methods": false,
"eval_code": false,
2013-03-15 17:30:43 +00:00
"unescape_strings": false,
2014-08-07 01:15:17 +00:00
"wrap_line_length": 0,
2015-02-24 23:39:33 +00:00
"wrap_attributes": "auto",
2015-03-15 18:10:26 +00:00
"wrap_attributes_indent_size": 4,
"end_with_newline": false
2012-12-06 21:56:34 +00:00
}
```
In addition to CLI arguments, you may pass config to the JS executable via:
* any `jsbeautify_` -prefixed environment variables
* a `JSON` -formatted file indicated by the `--config` parameter
* a `.jsbeautifyrc` file containing `JSON` data at any level of the filesystem above `$PWD`
Configuration sources provided earlier in this stack will override later ones.
2012-07-16 18:05:11 +00:00
2012-07-16 21:33:12 +00:00
You might notice that the CLI options and defaults hash aren't 100% correlated. Historically, the Python and JS APIs have not been 100% identical. For example, `space_before_conditional` is currently JS-only, and not addressable from the CLI script. There are a few other additional cases keeping us from 100% API-compatibility. Patches welcome!
2013-04-08 04:36:59 +00:00
### CSS & HTML
2013-03-18 19:48:28 +00:00
In addition to the `js-beautify` executable, `css-beautify` and `html-beautify` are also provided as an easy interface into those scripts. Alternatively, `js-beautify --css` or `js-beautify --html` will accomplish the same thing, respectively.
```js
// Programmatic access
var beautify_js = require('js-beautify'); // also available under "js" export
var beautify_css = require('js-beautify').css;
var beautify_html = require('js-beautify').html;
// All methods accept two arguments, the string to be beautified, and an options object.
```
The CSS & HTML beautifiers are much simpler in scope, and possess far fewer options.
2013-03-18 20:30:07 +00:00
```text
CSS Beautifier Options:
2014-11-10 02:46:26 +00:00
-s, --indent-size Indentation size [4]
-c, --indent-char Indentation character [" "]
-L, --selector-separator-newline Add a newline between multiple selectors
-N, --newline-between-rules Add a newline between CSS rules
2013-03-18 20:30:07 +00:00
HTML Beautifier Options:
2014-11-10 02:46:26 +00:00
-I, --indent-inner-html Indent < head > and < body > sections. Default is false.
-s, --indent-size Indentation size [4]
-c, --indent-char Indentation character [" "]
-b, --brace-style [collapse|expand|end-expand|none] ["collapse"]
-S, --indent-scripts [keep|separate|normal] ["normal"]
-w, --wrap-line-length Maximum characters per line (0 disables) [250]
2015-02-24 23:39:33 +00:00
-A, --wrap-attributes Wrap attributes to new lines [auto|force] ["auto"]
-i, --wrap-attributes-indent-size Indent wrapped attributes to after N characters [indent-size]
2014-11-10 02:46:26 +00:00
-p, --preserve-newlines Preserve existing line-breaks (--no-preserve-newlines disables)
-m, --max-preserve-newlines Maximum number of line-breaks to be preserved in one chunk [10]
-U, --unformatted List of tags (defaults to inline) that should not be reformatted
2014-10-01 00:45:10 +00:00
-n, --end-with-newline End output with newline
2015-02-06 04:10:35 +00:00
-E, --extra_liners List of tags (defaults to [head,body,/html] that should have an extra newline before them.
2013-03-18 20:30:07 +00:00
```
2013-04-08 04:36:59 +00:00
# License
2012-07-16 18:05:11 +00:00
2011-06-06 18:33:45 +00:00
You are free to use this in any way you want, in case you find this
2013-04-01 17:55:22 +00:00
useful or working for you but you must keep the copyright notice and license. (MIT)
2011-06-06 18:33:45 +00:00
2013-04-08 04:36:59 +00:00
# Credits
2012-07-16 18:05:11 +00:00
2013-03-29 00:16:54 +00:00
* Written by Einar Lielmanis, < einar @ jsbeautifier . org >
* Python version flourished by Stefano Sanfilippo < a.little.coder @ gmail . com >
* General maintenance and expansion by Liam Newman < bitwiseman @ gmail . com >
* Command-line for node.js by Daniel Stockman < daniel.stockman @ gmail . com >
2011-06-06 18:33:45 +00:00
2013-03-29 00:16:54 +00:00
Thanks also to Jason Diamond, Patrick Hof, Nochum Sossonko, Andreas Schneider, Dave
2011-12-05 07:58:26 +00:00
Vasilevsky, Vital Batmanov, Ron Baldwin, Gabriel Harrison, Chris J. Shull,
2012-06-25 14:43:06 +00:00
Mathias Bynens, Vittorio Gambaletta and others.
2014-04-26 01:26:20 +00:00
2014-10-01 00:45:10 +00:00
js-beautify@1.5.5