Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Polyfillとドライバーをnpmパッケージに移行する #68

Closed
3 tasks done
kou029w opened this issue Jul 30, 2019 · 13 comments
Closed
3 tasks done

Polyfillとドライバーをnpmパッケージに移行する #68

kou029w opened this issue Jul 30, 2019 · 13 comments
Assignees

Comments

@kou029w
Copy link
Contributor

kou029w commented Jul 30, 2019

chirimen-raspi3 環境のPolyfillと、chirimen環境に対応したそれぞれのデバイス用ドライバーをnpmパッケージにして、依存管理システムを導入する

@kou029w kou029w self-assigned this Jul 30, 2019
@kou029w
Copy link
Contributor Author

kou029w commented Jul 30, 2019

  • リポジトリ chirimen-oh/chirimen-raspi3 パッケージ @chirimen-raspi/polyfill
    • /polyfill.js … いまの gc/polyfill/polyfill.js
  • リポジトリ chirimen-oh/chirimen-drivers パッケージ chirimen-drivers-**
    • /**/**.js ... いまの gc/drivers/**.js

@kou029w
Copy link
Contributor Author

kou029w commented Jul 30, 2019

TODO:

@dynamis
Copy link
Contributor

dynamis commented Jul 30, 2019

index.html から script src=node_modules/... で polyfill/drivers 読み込めると思ったら出来ない問題について少し整理した:

container テンプレート (node など) にする

./node_modules 配下にアクセスするには container テンプレートが必要 codesandbox/codesandbox-client#1757

サンプル: https://codesandbox.io/s/2p8ylq3rwr

  • メリット
    • なんでもできる
    • example に polyfill/drivers のコピーを保持する必要はない
  • デメリット
    • read-only editor になってしまう
    • コンソールが出てきたりサーバ・ビルド環境を意識することになりかねない
    • 単なる example ホスト + editor に対して大げさすぎる

node_modules ごとコミットする

example だしまぁまるごと突っ込んでしまうという方法

  • メリット
    • github repo コピーするだけで npm i あるいは drivers のダウンロードとか考える必要がない
  • デメリット
    • polyfill/drivers 更新の度に examples リポジトリの更新が必要
      • post-commit hook などで自動化する余地はあるか?

import にする

module は import するのが本来の使い方であり、import をちゃんと使えば node_modules 配下もちゃんと percel さんがよしなにやってくれる。

  • メリット
    • まぁシンプル
    • モジュールベースなので strict モード実行になるのはいい話
    • example に polyfill/drivers のコピーを保持する必要はない
  • デメリット
    • polyfill/drivers 側の書き換え (export 対応) が必要
    • ブラウザで動作させるには script タグで type="module" として読み込む必要がある

dynamic import にする

type=module 付けたくないなら dynamic import

  • メリット
    • とてもシンプルかもしれない?
    • type=module は付けなくても良い
  • デメリット
    • まだ標準化されていない。Edge で使えない、Firefox も 67 で入ったばかり
    • 認知が低い機能をいきなり使うのは初心者向きとは言えない

まぁちょっとやりすぎ。

external resource にする

polyfill/drivers は適当に github pages でも何でも良いから

  • メリット
    • 超シンプル。
  • デメリット
    • オンラインでなければ動作しなくなる
      • オフライン動作時は src のパスを変えてもらうだけ?その時のパスは何処?
    • drivers を add dependencies から検索して読み込むことは出来ない
      • まぁ使っているサンプルを見れば分かるので単純だけど

補足

codesandbox の vanilla などの client template が percel 使ってくれたり static template ですら static ではないというのが大元のワナだった。percel 使うのも安直に使って dist をホストしているわけではないようだし...

@kou029w
Copy link
Contributor Author

kou029w commented Jul 31, 2019

比較的利用者への影響が少なそうなので「node_modules ごとコミットする」でとりあえず2019 Q3リリースは良いかなと考えます

@kou029w
Copy link
Contributor Author

kou029w commented Jul 31, 2019

パッケージ一覧: https://www.npmjs.com/org/chirimen-raspi

Polyfill

リポジトリ: ここ https://github.com/chirimen-oh/chirimen-raspi3
パッケージ: @chirimen-raspi/polyfill

ドライバー

リポジトリ: https://github.com/chirimen-oh/chirimen-drivers
パッケージ一覧: https://github.com/chirimen-oh/chirimen-drivers/blob/f29c5945f4a4bac3dc61e49164142bcd60ba2110/README.md

その他

gc 配下のサンプルコードを全て npm に移行したものに差し替えました

@satakagi
Copy link
Contributor

satakagi commented Aug 5, 2019

https://github.com/chirimen-oh/chirimen-raspi3/wiki/Contrib
の手順書に、npm移行後の、新しいドライバ・examplesのcontribの仕方(作法)をどなたか記載していただければと思います。

https://github.com/chirimen-oh/chirimen-raspi3/wiki/Release
こちらのwikiにも関係しそうですね。

特にこの手順の説明書が必要に思います。

npm module にして package.json を用意

@satakagi satakagi reopened this Aug 5, 2019
@satakagi
Copy link
Contributor

satakagi commented Aug 9, 2019

以前はI2Cのドライバが一か所のディレクトリにまとまっていましたが、今はExamplesの中に入り込んでしまっている感じですよね? またpolyfillもExamplesの中にコピーが入り込んでる感じ。
CHIRIMEN with micro:bitからも、これらドライバを直リンクしていたのですが、直リンク先のドライバのURLがかなり冗長・煩雑になってしまった感じがするのも気になります。(今頑張ってCHIRIMEN with micro:bitのExamplesの内容を修正中・・)
ちなみに、gc/polyfillはそのままあり、これがオリジナルという位置づけのようにみえますが、これと同じように、I2CのドライバもExamplesにばらけさせず、オリジナルの蓄積場所を設けたほうが良いと思います、

@kou029w
Copy link
Contributor Author

kou029w commented Aug 9, 2019

説明不足な部分で申し訳ないですが、それぞれのドライバーのリポジトリとしては https://github.com/chirimen-oh/chirimen-drivers を作成してオリジナルを集約してnpmにデプロイ、個別のサンプルは npm を介してローカルに保存(現在のExamples)か https://unpkg.com/ を利用する、という想定で考えていました

@kou029w
Copy link
Contributor Author

kou029w commented Aug 9, 2019

移動したことによって参照に失敗している問題があるのは意図して無かったです
ミスってしまいました、すみません。。。

消さずにもとの場所に置いておいても不都合無いような気もします
いかがしましょうか

ただ、相対パスで実ファイルを参照するという利用方法に関しては、非常にシンプルである一方で、ファイル構造に密結合になってしまっており、たとえばある対象のサンプルコードのあるディレクトリを別のディレクトリの階層に移動しただけで参照に失敗するという問題があります
そのため、npm によってバージョン管理と依存関係の解決ができる、というのはメリットあると考えます

また、GitHub Pagesを介して参照するというのは、同じくリポジトリのパスの構造に依存するので、おっしゃるとおり「URLがかなり冗長・煩雑に」なりがちという問題があります
そのため、https://unpkg.com/ を介して npm にアクセスするという方法が良いと考えます

ドライバー自体のパッケージ名に関しては、冗長なので直したい気持ちです。。。

Polyfill を参照するためのURL: https://unpkg.com/@chirimen-raspi/[email protected]/polyfill.js
Polyfill を参照するためのコマンド:

npm i @chirimen-raspi/pilyfill
# ./node_modules/@chirimen-raspi/polyfill/polyfill.js が得られる
ドライバーを参照するためのURL

Verified official drivers

https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]

Contributed drivers

https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]
https://unpkg.com/@chirimen-raspi/[email protected]

ドライバーを参照するためのコマンド

Verified official drivers

npm i @chirimen-raspi/chirimen-driver-i2c-ads1015
npm i @chirimen-raspi/chirimen-driver-i2c-adt7410
npm i @chirimen-raspi/chirimen-driver-i2c-gp2y0e03
npm i @chirimen-raspi/chirimen-driver-i2c-grove-accelerometer
npm i @chirimen-raspi/chirimen-driver-i2c-grove-gesture
npm i @chirimen-raspi/chirimen-driver-i2c-grove-light
npm i @chirimen-raspi/chirimen-driver-i2c-grove-oled-display
npm i @chirimen-raspi/chirimen-driver-i2c-grove-touch
npm i @chirimen-raspi/chirimen-driver-i2c-pca9685
npm i @chirimen-raspi/chirimen-driver-i2c-s11059
npm i @chirimen-raspi/chirimen-driver-i2c-veml6070
npm i @chirimen-raspi/chirimen-driver-i2c-vl53l0x

Contributed drivers

npm i @chirimen-raspi/chirimen-driver-i2c-ads1x15
npm i @chirimen-raspi/chirimen-driver-i2c-ak8963
npm i @chirimen-raspi/chirimen-driver-i2c-amg8833
npm i @chirimen-raspi/chirimen-driver-i2c-arduino-stepping-motor
npm i @chirimen-raspi/chirimen-driver-i2c-bme280
npm i @chirimen-raspi/chirimen-driver-i2c-bmp180
npm i @chirimen-raspi/chirimen-driver-i2c-bmp280
npm i @chirimen-raspi/chirimen-driver-i2c-canzasi-blink
npm i @chirimen-raspi/chirimen-driver-i2c-mpu6050
npm i @chirimen-raspi/chirimen-driver-i2c-mpu6500
npm i @chirimen-raspi/chirimen-driver-i2c-neopixel-i2c
npm i @chirimen-raspi/chirimen-driver-i2c-pca9685-pwm
npm i @chirimen-raspi/chirimen-driver-i2c-pcf8591

@dynamis
Copy link
Contributor

dynamis commented Aug 14, 2019

@dynamis
Copy link
Contributor

dynamis commented Oct 1, 2019

移行済みなのでクローズします (残作業があればまた別途 isseu 立てましょう)

@dynamis dynamis closed this as completed Oct 1, 2019
@dynamis
Copy link
Contributor

dynamis commented Dec 12, 2019

残件処理: r.chirimen.org/polyfill.js が github pages のままだったことで p5 Editor で次のように HTML から読み込もうとすると CORS エラーが出ていたので、ちゃんと Access-Control-Allow-Origin: * を付与してくれる unpkg.com へとリダイレクト先を変更:

<script src="https://r.chirimen.org/polyfill.js"></script>

chirimen-oh/r.chirimen.org@daa5eff

@dynamis dynamis reopened this Dec 12, 2019
@kou029w
Copy link
Contributor Author

kou029w commented Nov 18, 2020

もともとの問題は解決済みだと思うのでクローズしますね。
もし問題があるようでしたら別Issueを起票するなどお願いします。 > @dynamis

@kou029w kou029w closed this as completed Nov 18, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants