tomlla toml tomlion

ソフトウェアエンジニアのブログです

devserver使いたい話と、v-modelのlazyの話

だらだら寝言をかいています。 こんな投稿よまずにコードを書いて、ドキュメントを読んで、先へすすみましょう。

webpack devserverつかいたい件。

つかいたいけど、非SPAだと、バックエンドWAFとの兼ね合いでwebpack watchしたときもファイルに書き出すほかない。 ファイルに書き出すとおそい。。。
ちょっとここのデザイン書き換えて…ビルド終わってない…
あ、ここのコードミスってた。修正して….ビルド終わってない…..
という待ち時間がはっせいしてつらい。

バックエンドWAFというか、
ブラウザやjsのリクエストを受けて、htmlやjsonを返すweb application server
rails, play, spring bootなど)
をメインのweb serverを用意した場合、そのWAFはwebpackの設定など知らんので webpackでビルドしたファイルを静的ファイルとして認識して、配信する。

本番環境ではそれでいいんだけど、開発時はdevserver使いたいので こんな感じにしたい。

f:id:tomlla_92:20170731004942j:plain

書くサーバーサイドWAFでこういう構成がさくっとできるようにサポートしてくほしい。

その他: 「そんなv-modelで大丈夫か?」

v-modelにはv-model.lazyというものがあります。
普通はinput eventで更新が行われるんですが lazyつけるとchange eventで更新が行われます。
シチュエーションによってはlazy用意してくれるなんてvue最高!ってなります。

ということで、computedやwatchなど、更新時になにか処理をやっている場合は 「このフォーム、lazyつけなくてよいのか?」 と気にするがよいですね。

以下の例で、lazyをつけなかったらfirefoxだとenterキー押しても改行が表示されないと思います。
エンターキーを打った瞬間にtrim()とfilter()がおこなわれてしまうので。

<template>
  <textare v-model.lazy="gitignoreListAsText"></textare>
</template>

<script>
...
data() {
  gitignoreList: []
},
computed: {
  gitignoreListAsText: {
    get() {
      return this.gitignoreList.join("\n");
    },
    set(text) {
      this.gitignoreList = text.split("\n")
                               .map((line) => line.trim())
                               .filter((line) => line);
    },
  },
}
...
</script>

(謎:改行表示はされないけど、たぶんブラウザの持っているtextareaには改行文字が残ってる???)

追記

情報に誤りがありました。 firefoxでエンターキーを押したときに改行されないのは、イベントハンドリングの扱いに問題があるからではなく、 white-space: nowrap によるものでした。