Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

grunt-connect-rewriteを使うときにハマったこと

フロントの開発とサーバサイドの開発とで、実装上パスが異なってしまう場合が発生してしまったため、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'
}

という風に二重にバックスラッシュをつけてエスケープしてみたところ、正常にエスケープできました。

内部的にエスケープを自動で付加してるのが原因なのかな。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?