LoginSignup
9
2

More than 3 years have passed since last update.

Ionic4(ionic/angular)でnem2-sdkを動かした話

Last updated at Posted at 2019-12-08

どうも @scrpgilです。
突然ですが、半年以上前から、私はある問題を抱えていました。
それは、Ionic4(ionic/angular)の環境でnem2-sdkが動かないという問題です。nem2-sdkとはNEMという暗号通貨を扱いやすくするためのモジュールです。私は、個人プロダクトに、NEMを使うことがおおいんですが、Ionic4にアップグレードしてからnem2-sdkが動かなくなってしまっていたので、途方にくれてました。

しかしながら、昨日、Ionic4の環境でnem2-sdkを動かす方法がわかったので、その知見をまとめておきます。

*NEMとは
余談ですが、NEMは、暗号通貨を扱うためのIFをAPIとして公開しており、もっぱらWeb開発やってる人でも扱いやすい暗号通過ですので、ブロックチェーンに興味がある方は是非、触ってみてください。

結論

次のリンクのプロジェクトを参考にしてください。
ionic start でblankで作成したプロジェクトでnem2-sdkを動かせるようにしたものを、GitHubにアップしています。
https://github.com/scrpgil/ionic4-angular8-nem2-sdk

これは、@44uk_i3 さんが、Angularでnem2-sdkを動かせるリポジトリをアップしていたので、それを参考にしたものです。本家は、Angular8とnem2-sdkの組み合わせですが、Ionic4(ionic/angular)にも応用できます。
https://github.com/44uk/ng2-with-nem-sample

変更したソースコード、patchsフォルダについては、patch-packageをググってみてください。
今回初めて使ったけど、便利。

問題点:なぜnem2-sdkは動かないのか?

そもそも、Ionic3の時代は動いていました。なぜ、Ionic4(ionic/angular)で動かなくなったかというと、ずばり、Angular8に上がったことによるWebpackの設定のせいです。

Ionic3の時代は、Ionicチームが作成した@ionic/app-scriptのWebpackの設定を利用していました。その時の設定では、nodeモジュールで利用するが、ブラウザで利用しないモジュールは、空のモジュールを利用するようにしていました。

   // Some libraries import Node modules but don't use them in the browser. 
   // Tell Webpack to provide empty mocks for them so importing them works. 
   node: { 
     fs: 'empty', 
     net: 'empty', 
     tls: 'empty' 
   }

ソースコードのリンク

この設定が、Angular8の@angular-devkit/build-angularでは見当たりません。そのため、ビルド時(ionic serveのとき)にエラーが発生するのでした。
Screen Shot 2019-12-09 at 3.47.13.png

正直、なぜこの設定が@angular-devkit/build-angularにないのかは、まだ調べきれていませんが、 react-scriptsにも同様の記載があり、この内容を拝借して、@angular-devkit/build-angularのWebpackの設定に追記すれば、無事利用することができました。

react-scriptsのソースコードのリンク

自分の学びまとめ

これで、nem2-sdkを使えるようになりました。また、今までなんとなく使っていたWebpackを書き換える方法、それを、patch-packageを使って、Gitで管理できることを学びました。

今後、Webpack周りを強化したいので、patch-packageを使ってガンガン触っていきたいと思います。
それでは。

9
2
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
9
2