Upgrade to Pro — share decks privately, control downloads, hide ads and more …

真のrequire()をブラウザで

Narazaka
August 04, 2016

 真のrequire()をブラウザで

ブラウザ上のFSエミュレーション上で動的なrequire()ができるモジュール「browserfs-module ( https://github.com/Narazaka/browserfs-module.js )」を作ったのでみんな使ってね!

Narazaka

August 04, 2016
Tweet

More Decks by Narazaka

Other Decks in Programming

Transcript

  1. 自己紹介 Twitter: Github: npm: CPAN: ドリコム2015 新卒 サー バー サイドRuby

    好きな言語: Perl / CoffeeScript / Ruby / C# その他: 伺か/ 漫画読み描き/OP アニメ愛好家/ 鉄 @narazaka @Narazaka @narazaka NARAZAKA
  2. イカガカ (2014-) 1. jszip でキャラクター デー タのzip を解凍 2. node.js

    のFS をエミュレー トする でIndexedDB にファイルを展開 3. 人格DLL をemscripten でコンパイルして擬似FS にあるフ ァイルを読んで動作させる BrowserFS これ自体の話はまたいつか……
  3. 擬似FS 上にあるソー スファイル i f ( f i l e

    . m a t c h ( / ^ \ . * \ / / ) ) { f i l t e r s = r e q u i r e ( p a t h . j o i n ( p r o c e s s . c w d ( ) , f i l e ) ) ; }
  4. c o n s t f s = B r

    o w s e r F S . B F S R e q u i r e ( ' f s ' ) ; f s . w r i t e F i l e S y n c ( ' / a . j s ' , ' m o d u l e . e x p o r t s = r e q u i r e ( " b " ) ; ' ) ; f s . m k d i r S y n c ( ' / n o d e _ m o d u l e s ' ) ; f s . w r i t e F i l e S y n c ( ' / n o d e _ m o d u l e s / b . j s ' , ' m o d u l e . e x p o r t s = " b b " ; ' ) ; v a r r e s u l t = M o d u l e . _ l o a d ( " / a " ) ; c o n s o l e . l o g ( r e s u l t ) ; / / " b b "
  5. node.js のrequire が使うもの 1. lib/module.js (Module) 2. lib/vm.js (runInThisContext 関数)

    3. lib/internal/bootstrap_node.js (NativeModule) 4. lib/internal/module.js ( ユー ティリティ関数) 5. lib/internal/util.js ( デバック出力用ユー ティリティ関数) 6. src/node_ le.cc ( ファイル読み込み)
  6. node.js 内部で使うmodule 1. 組み込みのJavaScript 製module ( 使える) 2. うちinternal (

    使える) 3. C++ で組まれたネイティブバインディング ( 使えない)