tags | title |
---|---|
javascript uglifyjs webpack |
UglifyJSで文字列をエスケープシーケンスに変換する |
HTMLがShift_JISで配信されている環境で、JavaScriptにマルチバイトの文字を書いてUTF-8で保存し、ブラウザでアラートを表示したら文字化けしてしまった。
素直にスクリプトをShift_JISで保存し直せばよかったのだろうが、UTF-8で保存したかったので文字列をエスケープシーケンスへ変換することにした。
調べてみると、UglifyJSにはエスケープシーケンスに変換するオプションがあるようで、以下のIssueのコメントのようにすると変換できる。
CLIから実行する場合は以下のようにオプションを指定する。
$ uglifyjs index.js -b beautify=false,ascii_only=true
標準入力からスクリプトを与えると以下のような出力になった。
$ printf -- 'alert("マルチバイト")' | uglifyjs -b beautify=false,ascii_only=true
alert("\u30de\u30eb\u30c1\u30d0\u30a4\u30c8");
webpackの場合はUglifyJS Webpack Pluginを使用するので、以下のようにオプションを指定する。
const webpack = require('webpack');
module.exports = {
// ...
plugins: [
new webpack.optimize.UglifyJSPlugin({
output: {
ascii_only: true,
},
}),
],
};