最新版の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
なりでデーモン化すればよい。