Open8
【WIP】Optional Chainingが原因でbuildできない件を解決したい
jsコード内でoptional chainingを追加して、
npm run build
すると以下のエラーが出る。
ERROR in hoge.xxx.js from Terser
Unexpected token: punc (.) [webpack://./javascripts/hoge.js:67,22][hoge.xxx.js:13739,23]
TRY① webpackのtargetにes11を追加してみる
optional chainingはES11で追加された機能なので、webpackのtargetにes11
を追加してみた。
→何も変化なかったので元に戻した。
const config = {
mode: NODE_ENV,
entry: entrypoints,
target: ['web', 'es11'],
TRY② terserを5.2.0にバージョンアップしてみる
エラーが出た時にfrom Terser
と出ているので、terser
とterser-webpack-plugin
のバージョンを見てみる。
hoge.xxx.js from Terser
npm ls terser
で、自分のプロジェクトのterserのバージョンを確認。
├─┬ terser-webpack-plugin@2.3.8
│ └── terser@4.8.1
└─┬ webpack@5.76.0
└─┬ terser-webpack-plugin@5.3.6
└── terser@5.16.1
terser上でのoptional chainingについて言及されてる。
Optional Chaining has been introduced in terser@5.2.0 as stated in my post.
試しにterserを5.2.0にバージョンアップしてみる。
npm install terser-webpack-plugin@5.3.6
↓
└─┬ terser-webpack-plugin@5.3.6
└── terser@5.30.2
メジャーバージョンを3段階上げたので流石に怒られた。先に解消必須。
→一旦元に戻した。
TRY③ babel-loaderにプラグインを追加してみる
そもそもdevelopment環境で使っているwebpackではterserを使っていなさそう。
module: {
rules: [
// ~~~
{
test: /\.js$/,
exclude: /node_modules/,
use: [
{ loader: 'thread-loader' },
{
loader: 'babel-loader',
options: { cacheDirectory: true },
},
],
},
jsファイルに対してはbabel-loaderが最初に作用していそう。
以下の記事を参考に、@babel/plugin-proposal-optional-chaining
を追加する。
npm install @babel/plugin-proposal-optional-chaining --save-dev
optionsにpluginsを追加。
{
test: /\.js$/,
exclude: /node_modules/,
use: [
{ loader: 'thread-loader' },
{
loader: 'babel-loader',
options: {
cacheDirectory: true,
plugins: ['@babel/plugin-proposal-optional-chaining'],
},
},
],
},
→結果何も変わらなかったので元に戻した。
やっぱりterser.jsが問題ぽいな...