最新版のNode.jsでは、ES2015の機能のほとんどがサポートされており、別段トランスパイルを行わなくても使うことが出来る。
しかし、サポートが行われていない機能もある。
例えばモジュール機能がそれだ。
そういった機能を利用するためには、トランスパイルが必須となる。
例えばbabel-nodeでスクリプトを実行することで、Node.js上でもモジュール機能を使えるようになる。
babel-nodeについては、以下を参照。
ECMAScript(ES2015,Babel)におけるモジュールについて
しかしbabel-nodeでは、デーモン化できない。
もしかしたら出来るのかもしれないが、今の自分の知識では出来なかった。
だが開発の都合上、デーモン化したいケースもある。
調べていたら、babel-registerで出来ることが分かった。
https://github.com/babel/babel/tree/master/packages/babel-register
確認用のファイルを作成
デーモン化するファイルを先に用意しておく。
Node.jsでimportを使うケースとしては例えば、Reactのサーバーサイドレンダリングなどが考えられるが、ここでは理解しやすさを優先してとにかくシンプルにする。
// modules.js const myStr = 'この文字列が表示されれば成功です。'; export { myStr };
// index.js const http = require('http'); import { myStr } from './modules.js'; http.createServer((req, res) => { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write(myStr); res.end(); }).listen(8080);
modules.jsでエクスポートしたものをindex.jsでインポートしている。
index.jsを実行した状態でlocalhost:8080にアクセスして文字列が表示されていれば、成功である。
このまま実行してもシンタックスエラーになるので、まずトランスパイルできるようにする。
$ echo '{ "presets": ["es2015"] }' > .babelrc
$ npm install babel-preset-es2015
この状態で
$ babel-node index.js
とすれば、動く。
だがこれではデーモン化できないことは、既に述べた。
そこでbabel-registerの出番である。
babel-registerの利用
まずインストール。
$ npm install babel-register
次に、デーモン化したいファイル、今回はindex.jsだが、それをラップするファイルを作る。
そしてそのファイルで、babel-registerを読み込ませておく。
// wrap.js require('babel-register'); require('./index.js');
これで完成である。後はwrap.jsを、foreverなりnodemonなりでデーモン化すればよい。