本文へスキップ

JavaScript整形・圧縮

JavaScript Beautifier & Minifier

名前は一切変えずにJavaScriptやTypeScriptからコメントと空白だけを落とし、1行に潰れたバンドルは読めるところまでインデントし直します。

圧縮されたJavaScriptやTypeScriptを読める形に開き、小さくしたいときはコメントと空白を落とします。パーサではなくトークナイザの上に作られていて、その境目こそがこのツールの正直なところです。名前を変えず、式を書き換えず、文字列・テンプレート・正規表現の中には手を触れません。

🔒 ブラウザの中だけで動きますjavascriptformatminifybeautify
モード
インデント

JavaScript・TypeScript 入力

.js / .ts ファイルを置く

このタブの中で読みます。アップロードはしません。

整形結果

トークン

109

行

18

正直に言うと、これはパーサではなくトークナイザです

  • · トークナイザは正規表現リテラルと除算の区別、テンプレートリテラル中の ${ {a:1}.a }の扱い、文字列の中の // を正確に見分けます。だから文字列・テンプレート・正規表現の中は一文字も触りません。
  • · 圧縮はコメントと空白だけを消します。名前を変えることも式を書き換えることもなく、セミコロン自動挿入(ASI)が頼っている改行 — return の後、後置 ++ の前、次の行が ( や [ で始まるところ — は残します。Terser ほど小さくはなりませんが、動きが変わることもありません。
  • · 整形は中括弧・角括弧の深さと ; から文の切れ目を見つけ、字下げをやり直し、もとからあった改行はそのままにします。セミコロンを補わず、長い行を折らず、オブジェクトリテラルとブロックの区別がつかないので、どちらも1行に1項目ずつ書きます。
  • · TypeScript のジェネリクス Map<string, T> と比較 a < b は、前後のトークンを見て区別します。JSX は扱いません。
  • · 難読化されたバンドルを読めるようにするには十分です。これからコミットするコードには Prettier のほうが合っています。

圧縮されたスタックトレースの元の位置を探すには ソースマップで元の位置に を使ってください。

使い方

  1. コードを貼り付けるか、ファイルをドロップします

    1行に潰れたバンドル、インデントの入り混じったファイル、ジェネリクスの入ったTypeScript——どれも同じように読みます。ファイルはこのタブの中で読みます。

  2. 整形と圧縮のどちらかを選びます

    整形は波括弧の深さでインデントを付け直し、もともとの改行はそのままにします。圧縮はコメントと空白を消すだけで、指定すれば`/*!`のライセンス表記は残します。

  3. トークン列の検査を見守ります

    実行のたびに、出力の意味のあるトークンを入力と比べます。もし違っていればページが赤字でそう伝え、入力のほうを使うように言います。黙って通してはならない唯一の失敗です。

よくある質問

圧縮したのにTerserより大きいのはなぜですか

ここではコメントと空白しか消さないからです。Terserはプログラムをパースして、ローカル変数の名前を縮め、定数を畳み、到達しない分岐を落とします。それにはASTとスコープの解析が要り、どちらかを微妙に間違えれば動作が変わります。ここでは、削減が小さくなる代わりにコードを壊さないほうを選んでいます。

圧縮するとセミコロンの自動挿入が壊れませんか

壊れません。ASIが頼っている改行は残します。`return`の後ろ、後置の`++`の前、そして次の行が`(`や`[`で始まる場所です。改行を消すとプログラムの動作が変わる、まさにその地点です。

オブジェクトリテラルが1行に1プロパティずつ出るのはなぜですか

トークナイザにはオブジェクトリテラルとブロックの区別がつかないからです。どちらも`{`です。波括弧の深さにあるものは、すべて同じ扱いになります。パーサなら区別しますが、これは意図的にパーサではありません。

JSXは扱えますか

扱えません。JSXにはここに無いパーサが必要です。トークンの水準では`<Foo>`と比較演算を区別できませんし、`Map<string, T>`をしのげるジェネリクスの推測が、すでに当てずっぽうでできることの限界です。`.tsx`のファイルにはPrettierを使ってください。

Prettierの代わりに使えますか

難読化されたバンドルを読む用途なら使えます。それが目的です。これからコミットするコードには向きません。セミコロンを補わず、長い行を折り返さず、引数の並べ方についての意見を持ちません。PrettierはASTから出力し直すので、そうしたことができます。

ここから渡せます

次の一手

このツールが出したものをそのまま受け取れる道具です。