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
以外と呆気なく解決。。。