Webpack構成babel-loader
babel-loader
原文の表示|倉庫の表示|このページの編集
This package allows transpiling JavaScript files using Babel and webpack.
Notes: Issues with the output should be reported on the babel issue tracker.
インストール
webpack 3.x | babel-loader 8.x | babel 7.x npm install [email protected] @babel/core @babel/preset-env webpack
webpack 3.x babel-loader 7.x | babel 6.x npm install babel-loader babel-core babel-preset-env webpack
使用法
ドキュメント:loaderの使用loaderのしよう
Webpack構成オブジェクトでは、moduleのloadersリストにbabel-loaderを追加する必要があります.次のようにします.module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
}
## babel
オプションを参照してください.
optionsプロパティを使用してloaderにオプションを渡すことができます.module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
plugins: [require('@babel/plugin-transform-object-rest-spread')]
}
}
}
]
}
このloaderは、以下のloader固有(loader-specific)のオプションもサポートします.
npm install [email protected] @babel/core @babel/preset-env webpack
npm install babel-loader babel-core babel-preset-env webpack
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env']
}
}
}
]
}
module: {
rules: [
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
plugins: [require('@babel/plugin-transform-object-rest-spread')]
}
}
}
]
}
cacheDirectory
:デフォルトはfalse
です.設定がある場合、指定したディレクトリはloaderの実行結果をキャッシュするために使用されます.その後のwebpack構築では、実行するたびに発生する高パフォーマンス消費のBabel再コンパイルプロセス(recompilation process)を回避するために、キャッシュの読み取りが試みられます.Null値(loader: 'babel-loader?cacheDirectory'
)またはtrue
(loader: babel-loader?cacheDirectory=true
)が設定されている場合、loaderはデフォルトのキャッシュディレクトリnode_modules/.cache/babel-loader
を使用し、いずれのルートディレクトリでもnode_modules
ディレクトリが見つからない場合は、オペレーティングシステムのデフォルトの一時ファイルディレクトリに降格してロールバックします.cacheIdentifier
:デフォルトはbabel-coreバージョン番号、babel-loaderバージョン番号です.babelrcファイルの内容(存在する場合)、環境変数BABEL_ENV
の値(存在しない場合はNODE_ENV
に降格)からなる文字列.カスタム値に設定できます.identifierが変更された後、強制キャッシュが無効になります.forceEnv
:BABEL_はデフォルトで解析されます.ENVそしてNODE_ENV.BABEL_をloaderレベルで上書きできます.ENV/NODE_ENV.異なるbabel構成のクライアントとサービス側の同構造アプリケーションに非常に役立ちます.注:
sourceMap
オプションは無視されます.WebpackがsourceMapを構成している場合(devtool
でオプションを構成)、sourceMapが自動的に生成されます.トラブルシューティング
babel-loaderは遅い!
できるだけ少ないファイルを翻訳してください.
/\.js$/
を使用してマッチングすると、node_modules
ディレクトリまたは他の不要なソースコードを翻訳する可能性があります.node_modules
を除外するには、文書のloaders
構成のexclude
オプションを参照してください.cacheDirectory
オプションを使用して、babel-loaderを少なくとも2倍に高速化することもできます.これにより、変換の結果がファイルシステムにキャッシュされます.babelは各ファイルに補助コードを挿入し、コードの体積を大きくしすぎます!
babelは、
_extend
のようないくつかの共通の方法に対して非常に小さな補助コードを使用している.デフォルトでは、必要なファイルごとに追加されます.babel runtimeを独立したモジュールとして導入し、重複した導入を避けることができます.
次の構成では、babelが各ファイルに自動的にruntime注入を無効にし、
babel-plugin-transform-runtime
を導入し、すべての補助コードをここから参照します.詳細については、ドキュメントを参照してください.
注意:
npm install babel-plugin-transform-runtime --save-dev
を実行してプロジェクトに含める必要があります.npm install babel-runtime --save
を使用してbabel-runtime
を依存にインストールする必要があります.rules: [
// 'transform-runtime' babel runtime 。
{
test: /\.js$/,
exclude: /(node_modules|bower_components)/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
plugins: ['@babel/transform-runtime']
}
}
}
]
注:transform-runtimeとカスタムpolyfills(Promise libraryなど)
babel-plugin-transform-runtimeにはpolyfillが含まれているため、カスタムregenerator runtimeとcoreが含まれています.js、次の
webpack.ProvidePlugin
を使用してshimmingを構成する一般的な方法は機能しません.// ...
new webpack.ProvidePlugin({
'Promise': 'bluebird'
}),
// ...
次のような書き方も役に立たない.
require('@babel/runtime/core-js/promise').default = require('bluebird');
var promise = new Promise;
実際には次のように生成されます(
runtime
を使用した後).'use strict';
var _Promise = require('@babel/runtime/core-js/promise')['default'];
require('@babel/runtime/core-js/promise')['default'] = require('bluebird');
var promise = new _Promise();
前の
Promise
ライブラリは、上書きされる前に参照され、使用されています.1つの実行可能な方法は、アプリケーションに「イニシエータ(bootstrap)」ステップを追加し、アプリケーションが開始される前にデフォルトのグローバル変数を上書きすることです.
// bootstrap.js
require('@babel/runtime/core-js/promise').default = require('bluebird');
// ...
require('./app');
babelのnode APIはbabel-coreに移行した。
(原文:The node API for
babel
has been moved to babel-core
.)この情報を受信すると、すでにインストールされている
babel
パッケージがあり、loaderの略記としてwebpack構成で使用されていることを示します(このような方法では、webpack 2.xバージョンではサポートされません). {
test: /\.js$/,
loader: 'babel',
}
Webpackは、
babel
ではなくbabel-loader
パケットの読み取りを試みます.この問題を修正するには、babel v 6で廃止されたため、
babel
npmパッケージを削除する必要があります.(代わりにbabel-cli
またはbabel-core
が取り付けられている).babel
パッケージへの依存によって削除できない場合は、webpack構成で完全なloader名を使用して解決できます. {
test: /\.js$/,
loader: 'babel-loader',
}