とてもハマったので共有。
結論
外部から読み込む js には charset をキチンと指定しましょう。。。
-<script type="text/javascript" src="/js/bundle.js"></script>
+<script type="text/javascript" charset="UTF-8" src="/js/bundle.js"></script>
事象
今まで何の問題もなく webpack でビルドした js が動いていましたが、 facebook のアド用コードを追加した途端、ファイルが文字化けしました。以下のようなコードです。
index.html
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window,document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
</script>
...
<script type="text/javascript" src="/js/bundle.js"></script>
charset="UTF-8"
を外部から読み込む js に明示すると、文字化けが直りました。
原因は深く追求できていないですが、文字コードの指定などはしっかりしておくべきだと反省しました。
追記
さらに上記の修正をした後でも <meta charset="UTF-8">
を<head>
直下に書かないと、不具合が出ていました。
<head>
+ <meta charset="UTF-8">
<!-- Facebook Pixel Code -->
<script>
...
</script>
- <meta charset="UTF-8">
具体的には、/url?tags[]="あいうえお"
などの日本語クエリを含む api リクエストがなぜか shift-js に変換されて unable to decode value
という状態になっていました。
<meta charset="UTF-8">
を<head>
直下(Facebook Pixel Code より上)に書くことで回避できました。