今度はTypeScript + React Native for Web + webpack + github pages templateを作ってみました。
こちらにコードはありますのでみてみてね〜
はじまり
React Native(以後、RN)を使いたかったのですが、なんだか色々種類がありました。今回はRN for Webを使ってみました。
- React: Web Appを作るためのFrame Work
- React Native: Mobile Appを作るためのFrame Work
- React Native for Web: Web AppでReact Native使うためのFrame Work
このような感じで理解しています。1が最初に登場して、2がモバイルアプリサポートのために登場して、3はモバイルアプリをwebアプリにも使いたいという要望に応えて登場したのかな?(自己解釈)
2,3を使えばマルチプラットフォームなアプリが開発できるため、なようです。
とりあえず流行りに乗って、RN for Webを使ってテンプレを作ります。
まず、ベースとなる以下の記事で作成したテンプレを拡張したいと思います!以下、説明するパラメタなどは新たに追加したものに関してです。
tsconfig.json
プロパティ | 説明 |
jsx | どのようなjsx codeを生成するか? .tsxから、.jsにするか.jsxにするか選べるようです。(公式) |
moduleResolution | 使いたいtargetに欲しいライブラリがないときにライブラリを追加できる |
依存の追加
babelやreact-native系の依存するパッケージを追加していきます。
index.web.ts
ルートにindex.html以外にindex.web.tsというファイルを追加しました。
この中で、表示するアプリのコンポーネントを登録し、エントリーファイルとしてロードするようwebpack configを修正します。
App.tsx
ここでは、TextコンポーネントとButtonコンポーネントを使っています。
このように、RNではコンポーネント(部品)を簡単に利用することができます。
他にも、ScrollViewやTextInputなどさまざまなコンポーネントが提供されています。
webpack.config.ts
エントリの追加
entry: ['./index.web.ts', './src/styles.css'],
entryパラメタに新たなエントリーファイルであるindex.web.tsを追加します。
babel-loaderの追加
ここは正直100%理解できていません。とりあえず公式のいうようにコピペしたのみです。
もうちょっと色々説明つけてほしいな。。
use: [
{
loader: 'babel-loader',
options: {
cacheDirectory: true,
// The 'metro-react-native-babel-preset' preset is recommended to match React Native's packager
presets: ['module:metro-react-native-babel-preset'],
// Re-write paths to import only the modules needed by the app
plugins: ['react-native-web'],
},
},
,
{ loader: 'ts-loader' },
],
babel
babelとは、javascript用のトランスパイラーです。各ブラウザには、対応するjsバージョンがあり、
自分の作ったアプリがその条件を満たしていない場合、ブラウザではロードができないという問題があります。
この問題を解決してくれるのが、babel!
babelを使うと、es6を使っている自分のアプリをes5しか動かないブラウザでも動かせるようになります。babelがトランスパイルしてくれるので!
とても便利!
presets
こちらは、pluginのセットらしいです。
plugins
こちらはただのpluigin。
じゃあ、presets vs plugins?
パラメタを分ける必要があるのか気になったので少し調べてみました。
ありがたきstackoverflowで似たような質問を発見!
どうやら、pluginsのがpresetsより先にロードされるらしいですね。
サンプル
ボタンを押しても何も起きませんが、RNのボタンコンポーネントを使っているのがわかりますね。
まとめ
TypeScript + React Native for Web + Webpackな環境を作ってみました。
勉強になりました〜webpackは難しいな〜。。
にほんブログ村に参加しております!よろしければクリックお願いします 🙂
にほんブログ村
コメント