Node.js + Babelで「ReferenceError: regeneratorRuntime is not defined」となる場合


ES6で開発し、Babelでトランスパイルしたものをnode transpiled.jsの形で実行していますが、 「ReferenceError: regeneratorRuntime is not defined」のエラーが表示されるようになりました。。。

環境

package.json

"scripts": {
	"build": "babel src -d dist --presets babel-preset-env --copy-files"
},
"devDependencies": {
	"babel-cli": "^6.26.0",
	"babel-preset-env": "^1.7.0",
	"eslint": "^5.16.0"
}

.babelrc

{
	"presets": [
		[
			"env",
			{
				"targets": {
					"node": "current"
				}
			}
		]
	]
}

原因

await-aysncが原因らしいです。

Webpackの設定などで解決する情報はありましたがNode.js + Babelで解決するのに手間取ったので備忘録として。

対策1

調べたところによると.babelrcを以下のようにすると良いと発見したので早速変更

.babelrc

{
	"presets": [
		[
			"@babel/preset-env",
			{
				"targets": {
					"node": "current"
				}
			}
		]
	]
}

Error: Cannot find module ‘@babel/preset-env’

もちろんインストールしていないのでエラー

yarn add @babelとしても同じエラーが。。。

yarn add @babel/preset-envでインストール? と試してみるが次は以下のエラー

Error: Cannot find module ‘@babel/core’

yarn add @babel/coreと不足しているパッケージをインストールし続けるのは違う、と思ったので別の方法を模索。。。

対策2

babel-polyfillをインストールしてトランスパイル対象のファイルにimport babel-polyfill;を記述することで解決。 という情報を発見。

そんなにシンプルに解決するのか半信半疑でしたが試してみることに。

yarn add --dev babel-polyfillとしエントリーファイルにimport babel-polyfillを追加してyarn build

以外と呆気なく解決。。。


Leave a Reply

Your email address will not be published. Required fields are marked *