フロントの開発とサーバサイドの開発とで、実装上パスが異なってしまう場合が発生してしまったため、grunt-connect-rewrite(https://github.com/viart/grunt-connect-rewrite )を使ってみたのですが、そのときハマってしまったのでメモ。
忙しい人のための要約
grunt-connect-rewriteのfrom
を記述するときにエスケープシーケンスを使いたい場合は、バックスラッシュを二重に記述する。
{
from: 'path\\?hoge=(.*)$',
to: '/$1.html'
}
要約ここまで
解説
rulesを記述するときは、下記のとおりに書くと思うのですが、
Gruntfile.js
connect: {
rules: [
{
from: 'path'
to: 'path'
}
]
}
このfrom
は内部的に正規表現で処理されているため、正規表現が当然使えます。
例えば、
{
from: '/js/(.*)$',
to: '/js/new/$1'
}
という感じ。このときは、/js/
ディレクトリ以下のファイルを、ファイル名やディレクトリ構成をそのままに、/new/
フォルダ以下に転送する、という感じになります。
ところで普通/
はエスケープするところですが、上記ではエスケープしていません。このへんは内部的にうまいことエスケープしているらしいです。
しかし、今回?
を使おうと思ったところ、そこでエラーが発生。エスケープをちゃんと書けばいいのかな?と思って
{
from: 'path\?hoge=(.*)$',
to: '/$1.html'
}
みたいに変更してもエラーが発生。悩んでいろいろ試した末、
{
from: 'path\\?hoge=(.*)$',
to: '/$1.html'
}
という風に二重にバックスラッシュをつけてエスケープしてみたところ、正常にエスケープできました。
内部的にエスケープを自動で付加してるのが原因なのかな。