22
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Riot.jsで通貨コンバータを作る

Last updated at Posted at 2015-02-13

Riot.jsを使った、シンプルな通貨コンバータです。Browserifyでプリコンパイルするサンプルとして作ってみました。Yahoo!からAPIで現在の通貨レートを取得して表示するだけ。インクリメンタルサーチができます。(よく考えたら、「コンバータ」ですらないですね)

※この記事は、こちらの日本語版的な内容になります。

Currencies.png

試す

GitHub Pagesに置いておきました。Riot.js Currency Calculatorにアクセスしてみてください。

クローンとビルド

手元で試すには、次の手順でどうぞ。

  1. このリポジトリをクローン
  2. $ npm install
  3. $ npm start

Gulp と Browserify

この例では、いくつかのgulpタスクが定義されています。

  • clean: 生成されたファイルを削除する
  • browserify: .js, .tagファイルをコンパイル
  • css: autoprefixとミニファイほか
  • others: index.htmlなど、上記以外のファイルの移動

Browserify の基本的な使い方

riotifyで、.tagファイルのコンパイルが可能です。ちなみに、.tagファイルは、riotで使うテンプレートとスクリプトが一緒になったものです。

gulp.task 'browserify', ->
  browserify
    entries: [$.app]
    debug: true
  .transform riotify
  .bundle()
  .pipe source path.basename $.app
  .pipe buffer()
  .pipe gulp.dest $.dist

実際には、上記のほかソースマップや圧縮が必要です。詳しくは、gulpfile.coffeeを参照。

CSS *-processors

Riot.jsはCSSプリ/ポストプロセッサには対応していません。

  • CSS プリプロセッサ: LESS or Sass
  • CSS ポストプロセッサ: autoprefixer
  • CSS import, compression, lint, ...ほか

ただ、下記の方法でCSSプロセッサを使うことは可能です。

  • <style>...</style>の部分をbrowserifyタスクで無視
  • <style>...</style>の部分をcssタスクで抽出してstyle.cssに加える

そのために使えるヘルパーがいくつかあります。

transformify

transformifyは、テキストを指定の関数で処理できるトランスフォームです。ここでは、riotifyに渡す前に<style>...</style>を削除しています。

transformify (tag) ->
  tag.replace /<style>[\s\S]*<\/style>/gm, ''`

gulp-replace

.tabファイルから、<style>...</style>の部分を抽出して、他のCSSと結合しています。

replace /(^[\s\S]*<style>|<\/style>[\s\S]*$)/gm, ''`

CSSをtagファイルに書く or 書かない

tagファイルに書くと、見通しが良くなります。スタイルやスクリプトが長くなって、全体像が分かりにくくなったら、おそらくコンポーネントを分割するべきです。1ファイルで、HTML, CSS, JavaScriptがわかりやすくまとまっているのが理想的だと思います。

<item>

<span class="title">{ opts.title }</span>
<span class="price">{ opts.price }</span>
<span class="usd">= 1 USD</span>

<style>
  item {
    display: block;
    border-bottom: 1px dotted #ddd;
    background: white;
    line-height: 2em;
    padding: 0 7%;
  }
</style>

</item>

ただし、Riot.js単体では今のところ...

  • CSSプロセッサが使えない
  • 繰り返し要素で、同じ<style>が出現する

という問題を含んでいます。

なので、上記で紹介した方法をとるか、CSSについては最初から別ファイルに書くのが、しばらくは現実的でしょう。

22
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
22
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?