ES6構文をサポートするために、babel-nodeおよびbrowserifyとbabelifyトランスフォームを使用してサイトを開発しています。
私はただこれを実稼働で実行できますか? babel-node server
のではなく node server
ノードでES6を実行するには、他にどのようなオプションが必要ですか?
ビルドのために実行し、開発を開始するコマンドは次のとおりです
// npm run build
browserify -t [babelify] client.js > public/js/bundle.js",
// npm start
babel-node server.js"
ここに私の開発依存関係があります
"babel": "^4.0.1",
"babelify": "^5.0.3",
"browserify": "^8.0.3"
クライアント側のコードについては、あなたは正しいことをしています。 babelify
それをクライアントに出荷します。
サーバーサイドコードでは、 babel-cli を使用して通常のビルドを行うだけです
http://babeljs.io/docs/setup/#babel_register によると、
babel-register
は本番用ではありません— requireフックは、単純な場合に主に推奨されます。
バベル6+
Babel 6では、デフォルトで変換は含まれていません。それでは、babel-cli
とbabel-preset-es2015
をインストールすることから始めましょう。
$ npm install --save-dev babel-cli babel-preset-es2015
変換を.babelrc
ファイルに追加します—これは上記でダウンロードしたperstモジュールです。 プリセットの完全なリスト を見て、最適なものを確認してください。
{
"presets": ["es2015"]
}
build
スクリプトをpackage.json
に追加します。以下のsrc
は入力ファイルで、build
は変換された出力ファイルです
"scripts": {
"build": "babel src -d build"
}
それからビルドしてください!
$ npm run build
次に、コードを実行します。この時点で、build
ディレクトリ内のファイルを実行する必要があります。
$ npm start
babel <= 5の場合は、requireフックを使用します。
require("babel/register");
拡張子。es6、。esを持つノードに必要な後続のすべてのファイル、。jsxおよび。jsはBabelによって変換されます。 polyfill も自動的に必要です。
ES6でソースファイルを保持できますが、node server.js
を使用してそれらを実行できます。
あなたのコメントによると、あなたは少し問題を抱えているようです。上記の黄色のハイライト部分に特に注意してください。最初のファイルは、ノード自体で実行されるES5のみです。すべての後続のrequireはBabelによって変換されます...
典型的なセットアップは次のようになります
server.js
// only ES5 is allowed in this file
require("babel/register");
// other babel configuration, if necessary
// load your app
var app = require("./app.js");
app.js
// this file will be loaded through babel
// you can now use ES6 here and in every other include
起動してください!
$ node server.js
Babeljs CLI documentation は以下を警告します:
本番用ではないbabel-node
本番環境でbabel-nodeを使用しないでください。キャッシュはメモリに格納されるため、メモリの使用量が多く、不必要に重いです。また、アプリ全体をオンザフライでコンパイルする必要があるため、起動時のパフォーマンスが常に低下します。
これは、アプリケーションをbabel-nodeではなくnodeで実行するようにnpmスクリプトを設定する方法の例です。
"scripts": {
"clean": "rm -rf build && mkdir build",
"build-css": "node-sass scss/app.scss public/css/app.css",
"build-server": "babel -d ./build ./server -s",
"build": "npm run clean && npm run build-css && npm run build-server",
"lint": "eslint source/ --quiet",
"start": "node ./build/index.js",
"debug": "node --debug ./build/index.js",
"test": "for i in $(ls tests/); do babel-node \"./tests/${i}\" | faucet ; done",
"validate": "npm run lint; npm run test && npm outdated --depth 0"
},
ブログ投稿 で詳細を見つけることができます
本番環境でbabel-nodeを使用する場合の長所と短所を比較検討することが重要です。
babel-node
は、市販のハードウェアで、起動コストに0.5秒から1秒を追加します。しかし、アプリが長時間実行されるサーバーである場合、その起動コストはそれほど重要ではありません。一方、
src
/lib
およびdist
ディレクトリを個別に作成する必要もありません。import
する場合、src/myutils
からインポートするか、lib/myutils
からインポートしますか? babel-node
を使用すると、その問題が解消されます。モジュールのサポートにのみBabelを使用します。 V8は2017年1月10日に モジュールのサポート をリリースしました。数か月以内にNodeのフラグの下にモジュールサポートが表示され、Babel mootを使用する理由がわかります。 。
@cuadramanの答えは@naomikよりも正確です。
簡単に質問に答えるには、いいえ、babel-node
を明示的に呼び出すべきではありません。 babel-node
は、babel-cli
によって消費されるプライベートライブラリです。
公式チュートリアルには、ブラウザ側ではなくノードで起動して実行するために必要なものがすべて含まれています: https://github.com/babel/example-node-server 。それを読んで!さまざまな方法を使用した非常に多くの誤解を招くブログチュートリアルを見つけたので、この記事が最もわかりやすいと感じました。
ボーナス:多くの人が思うこととは逆に、すべてのトランスパイルマジックをローカルにインストールできます(npm install --save-dev babel-cli nodemon babel-preset-es2015 babel-preset-stage-2
を使用)。 Babelまたはそのヘルパーモジュールをグローバルにインストールする必要はありません!かなり気の利いた。