Ubuntuではパッケージでnodejsとnpmを入れる。パッケージが存在すれば、原則それを使う。それ以外の個別のものはnpmでglobalインストールするのは気が引けるので、環境変数をやりくりしつつ、ひとまずlocalインストールでしのぐ方向。
Ubuntuはnode
ではなくnodejs
にリネームされているので、$HOME/bin
にsymlinkを置く(そうするとデフォルトではPATH
に追加されるように.profile
が書いてある)。ちなみにnode
をインストールすると、node.jsとは全く関係が無いax25-node
というinetd
起動のデーモンがインストールされる。
$ ln -s /usr/bin/nodejs $HOME/bin/node
それからPATH
にnpmでインストールしたコマンドが検索されるようにする。相対パスにしたのは意図的なもの。
$ export PATH=$PATH:node_modules/.bin
作業場のディレクトリを作って、その中に移動する。
mkdir testapp && cd testapp
jspmをインストールし、github用のtoken設定を入れておく。そうしないと、怒涛のgithubアクセスで、レートリミットに引っかかる。tokenを与えるとanonymousアクセスではなくなるので、上限が引き上げられる。
npm install jspm
jspm registry config github
# この後は対話シェルになる
jspm の設定を作る。yeomanなどを使うと、この辺がすっ飛ばされる。
jspm init
index.html
と app.js
を作り、jspm init で作った public ディレクトリに置く。
<html>
<script src="jspm_packages/system.js"></script>
<script src="config.js"></script>
<script>
System.import("app");
</script>
</html>
console.log("hello");
public ディレクトリがドキュメントルートに見えるようにwebサーバを起動する。何を使ってやっても構わないけれど、例えばここではpythonで。
python3 -m http.server
ブラウザで開くと、javascript console に hello と出力されているのが確認できる。これだけだとモジュールシステムのありがたみ皆無なので、npm:base64-js
を使ってみる。
jspm install npm:base64-js
そしてapp.js
側からそれを使う。import文いくつか試行錯誤して、system.jsの期待する方式はこれだなとあたりを付けた。
import base64 from 'base64-js'
console.log(base64);
ということで、javascript のモジュールの使い方は分かった気分になった。このままだと大量のファイルを読み込むことになるので、最後にまとめる。
jspm bundle app --inject --minify
app.js でインポートしている依存ライブラリがまとめてbuild.jsに取り込まれてminifyされる。injectを指定すると、ローダがbuild.js
から最初に見つけてくれるようになるので、追加の読み込みが発生しない、ということかな。ブラウザをリロードしてもapp.js
やbase64-js@0.0.8.js
へのアクセスは発生しないはず。system.js
やconfig.js
は相変わらず個別に読み込まれるけど、そこは目をつむる。
つづく