元々JavaScriptにはファイルの読み書き、自由なTCP/IP通信を行う機能は有していません。
えっ、FileAPIやAjaxがあるだろ?
説明がややこしいですが、あれらはブラウザ側が用意しているAPIであって、
JavaScript本体はそれを使わせてもらってるだけで別物なんですよね。
DOM APIもAPIを冠するだけあってJavaScriptの外側です。
要するにJavaScript本体って単純に演算するだけしか能がないんですよ。
だから意外と良いコード書けるやん、ブラウザ関係無しの環境で使いたいと、
V8エンジンを持ち込んでも機能がまるで足りないわけです。
Node.jsはC++でファイル読み書きやTCP/IP通信のモジュールを自作し、
CommonJSのrequireという思想を実装、require関数を通してこれらのモジュールを使えるように魔改造したJavaScriptの実装の一つです。
一概にそうとはいえない(製品による)のでしょうか?
npmで配布されているパッケージは全てrequireで呼び出す所が前提となっており、
そもそも普通のJavaScriptでどうやって使えばいいねん状態です。
JavaScriptのコード自体は単なる文字列です。
理論上は全部コピーして1ファイルに固めて、オレオレのrequire関数を実装して呼び出せるようにしておけばJavaScript環境でも実現できそうですよね。
それを本当にやってのけたのがBrowserifyというライブラリです。
この思想はWebpack等の競合ライブラリに受け継がれ、今ではJavaScriptのコードもnpmで配布することが一般的になっています。
もちろん、Node.jsの為にC++で用意された機能は一切JavaScriptでは使えません。
一覧はドキュメントに載ってまして、
例えばファイルの読み書きはFile System(fs)です。
使いたいライブラリのソースコードにrequire('fs')
が書いてあったらほぼアウト。
マジかよ…それを全モジュールで行うの?と聞かれたらマジかつ全部やってくださいという回答になります…
とはいえ、プロジェクトの説明書きでJavaScriptでの利用を想定しているパッケージは、そういう旨を英語で頑張って説明している事が多いです。BrowserifyやWebpackの名前やリンクが出てきたらほぼ確定でセーフでしょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/05 04:10
2018/09/05 04:21
2018/09/05 04:27