48
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Webpack 4:babel-loader のアップデートで起きたエラーを解決

Last updated at Posted at 2018-08-31

babel-loader を 7.1.5 → 8.0.0 のアップデートで、以下のエラーが発生。

error  Module build failed (from ./node_modules/babel-loader/lib/index.js):
 Error: Couldn't find preset "@babel/preset-env" relative to directory

解決ついでにパッケージや設定を整理したので、メモしておく。

1. 関連パッケージの入れ直し

以前 Babel を 6→7 にアップデートした際、不要になったパッケージを削除したかの記憶がなかったので、関連したものは一応全部入れ直した。webpack は入れ直す必要はないだろうが一応入れ直した。

Babel 6 で使うパッケージ群と Webpack をアンインストール
npm uninstall --save-dev babel-core babel-preset-env babel-loader webpack @babel/polyfill

Babel 7 で使うパッケージ群を Webpack インストール
npm install --save-dev @babel/core @babel/preset-env babel-loader webpack

脆弱性の自動修正(完全ではない)
npm audit fix

2. .babelrc、.browserslistrc の修正

変更前

.balelrc
{
  "presets": [
    ["env", {
      "targets": {
        "browsers": [
          '> 0.5% in JP',
          'Firefox ESR'
        ]
      }
    }]
  ]
}

変更後

対応ブラウザの設定は、.browserslistrc で行う。
"useBuiltIns": "usage" で、指定したブラウザに必要な polyfill を import してくれる。
でも、場合によっては別途 polyfill が必要な場合もあるらしいので留意しておく。
(@babel/polyfill は不要になったのでこの記事冒頭のコマンドでアンインストールした)

.babelrc
{
  "presets": [
    [
      "@babel/preset-env",
      {
        "useBuiltIns": "usage"
      }
    ]
  ]
}

合わせて .browserslistrc の編集(なければ作成)。
autoprefixer 等を使っていれば、すでにあるはず。
記述に対する対象ブラウザは browserl.ist でチェックできる

.browserslistrc
> 0.5% in JP
Firefox ESR

3. webpack.config.js の編集

presets を 'env' から '@babel/preset-env' に変更

webpack.config.js
module: {
  rules: [
    {
      test: /\.js$/,
      exclude: /node_modules/,
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['@babel/preset-env'] // 変更前は 'env'
        }
      }
    }
  ]
}

4. gulp に発生したエラーに対処

gulp (v4) のタスクを走らせようとすると、以下のエラーが。

[14:06:41] Failed to load external module @babel/register
[14:06:41] Failed to load external module babel-register
[14:06:41] Failed to load external module babel-core/register
[14:06:41] Failed to load external module babel/register

1番上の @babel/register をインストールすれば良い(他は旧いやつ)。
npm install --save-dev @babel/register


参考記事

48
39
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?