kurodakazumichi / issues

0 stars 0 forks source link

【React + Mobx】環境構築まとめ #51

Open kurodakazumichi opened 5 years ago

kurodakazumichi commented 5 years ago

React + Mobxでのフロントエンド開発環境構築

カリキュラム

思ったこと

node.jsで作ったjavascirptをブラウザで動かすためには一手間必要になるんだけど なんとなくjavascirpt=ブラウザで動かせると思って取りかかるとハマる。

確かに言語はjavascriptだけど、PC上で動作するものをブラウザ上で動かそうってなれば 動作環境違うんだからそれなりに手間はかかるんだよって事。

それをサクッと解決してくれるのがwebpackなので、webpackは結構重要だなーと思う。

kurodakazumichi commented 5 years ago

TODO

kurodakazumichi commented 5 years ago

reset-cssの対応

2018年11月 reboot.cssなるものが良いらしいのでreboot.cssを採用。

reboot.cssもnpmで管理されてるなら、npmで使いたいところ

kurodakazumichi commented 5 years ago

font-awesomeの対応

fontのファイルタイプの違い

IE9を以下を捨てるならwoffだけ使っておけばいいと思う。 マルチブラウザ、かつ古いブラウザにも対応するなら各種ブラウザが認識できるフォントファイルを全部ぶち込む必要があるが、その分ページサイズは増える。 woffなら主要でモダンなブラウザは基本対応してるので、古いものは切り捨てていこう。

参考になったサイト

WOFF (Web Open Font Format) は、Mozilla が Type Supply や LettError、他の組織と提携して開発した新しい Web フォント形式です。これは、TrueType および OpenType, Open Font Format に使用されているテーブルベースの sfnt 構造と同じ圧縮されたバージョンを使用しています。WOFF には、これにメタデータと個人利用のためのデータ構造が追加されており、作成者とベンダーがライセンス情報を書き込むことができる予約フィールドも含まれています。

WOFF の使用には 3 つの利点があります:

フォントデータが圧縮されているため、サイトで WOFF を使用すると、無圧縮の TrueType や OpenType ファイルの使用と比べて帯域を抑えることができ、読み込み時間も短縮されます。 自社の TrueType や OpenType 形式のフォントが Web 上で使用されること許可したくない多くのフォントベンダーは、WOFF 形式のフォントなら使用を許可できるでしょう。これは、サイトのデザイナーに対してフォントの可用性を高めることになります。 プロプライエタリなブラウザベンダーもフリーソフトウェアのブラウザベンダーも、WOFF 形式を好んでいます。つまり、他の既存のフォント形式と異なり、WOFF 形式のフォントが、Web のための真にユニバーサルで相互運用が可能なフォント形式になる可能性があります。 WOFF と WOFF2 という、2 つのバージョンの WOFF があります。これらの主な違いは、使用する圧縮アルゴリズムです。@font-face では format 記述子で、それぞれ 'woff' と 'woff2' で識別されます。

kurodakazumichi commented 5 years ago

SASSの対応

kurodakazumichi commented 5 years ago

Mobxの導入

mobxdecorator構文を使うためにbabelpluginを追加している。

@babel/plugin-proposal-class-properties

https://babeljs.io/docs/en/babel-plugin-proposal-class-properties

これは以下のような普通のクラスプロパティの書き方を使えるようにするプラグイン

class Bork {
  a = "hoge";
  b = () => {}
  static c = "bar";
  static f = function() {}
}

@babel/plugin-proposal-decorators

https://babeljs.io/docs/en/babel-plugin-proposal-decorators これは@anotation構文を使えるようにするプラグイン

@annotation
class MyClass { }

function annotation(target) {
   target.annotated = true;
}
kurodakazumichi commented 5 years ago

TODO

kurodakazumichi commented 5 years ago

TypeScriptを導入

kurodakazumichi commented 5 years ago

Reactでページ遷移するための準備

react-router-domはURLでコンポーネントを切り替えるための仕組みを提供するパッケージ typescriptを使っているので型定義ファイルもいれておく。

https://numb86-tech.hatenablog.com/entry/2017/05/06/125333

kurodakazumichi commented 5 years ago

ReactでLinkを使わずonClickのなかでページ遷移させたい場合

https://qiita.com/junara/items/a4a98c27dc23fd53ebb9 ここが参考になる。

Reactを使ったページ遷移はサーバーにアクセスしに行くわけではなく JavaScriptだけで表示の内容を切り替えている。

react-router-domはブラウザのhistoryを使ってページ遷移をしている。 実際にサーバーにアクセスしに行っているわけではないというところが混乱した。

またhistoryを操作してURLを変えているが、サーバーにはindex.htmlしかないわけで 本来404を返すところはindex.htmlへフォールバックするという設定をサーバーはしないといけない。

kurodakazumichi commented 5 years ago

Typedocを導入

https://qiita.com/ConquestArrow/items/eb4a0dfb13497be4d6a3 使い方はここが参考になる。

基本はJSDoc風にコメントを書いておき、コマンド一発でドキュメントが作られる。

kurodakazumichi commented 5 years ago

ClassNamesの導入

kurodakazumichi commented 5 years ago

Storybookの導入

function loadStories() { require('../stories/index.js'); // You can require as many stories as you need. }

configure(loadStories, module);

- `../stories/index.js`を作成:
```js
import React from 'react';
import { storiesOf } from '@storybook/react';
import { Button } from '@storybook/react/demo';

storiesOf('Button', module)
  .add('with text', () => <Button>Hello Button</Button>)
  .add('with some emoji', () => (
    <Button>
      <span role="img" aria-label="so cool">
        😀 😎 👍 💯
      </span>
    </Button>
  ));
kurodakazumichi commented 5 years ago

StorybookをTypeScriptで作られたReactComponentに対応させる

TypeScriptとawesome-ts-loaderはすでに入れてるのでそこから

これでいける。

kurodakazumichi commented 5 years ago

↑TypeScriptはこれでいけるけど、sass使ってるとさらにsassの設定も追記が必要

kurodakazumichi commented 5 years ago

Storybookのaddon