読者です 読者をやめる 読者になる 読者になる

S.F. Page

Programming,Music,etc...

babel 6.1.18における export * の挙動が変?

babelをアップデートしたら意味不明のトラブルが発生して悩んでいる。

swizec.com

私もこのポストの記事と同じ問題にハマっているらしい。すこし内容が違うかもしれないが。

"use strict";
export * from './audioNodeView';
export * from './eg';
export * from './sequencer';

上のre-exportをしたとき。babelの古いバージョンでは問題なかったのだが、今だとよくわからないエラーが出る。

To get a node path the parent needs to exist while parsing file

訳すと

ノードパスを得るには親がファイルを解析中存在している必要がある。

まったく意味不明だ。どうすればいいのだ。実はBabelのIssueに挙がっていたようなのだが、このIssueに関する件がことごとく削除されている。 でその消されたIssueに書かれてあったのを試すと確かにエラーは消える。それはこうだ。

"use strict";
export * from './audioNodeView';
export * from './eg';
export * from './sequencer';

// ダミーのexportを加える
export function dummy(){};

このダミーのexportを書くとなぜかちゃんと動く。ちゃんと動くとは言っても以前の挙動とは異なっているが。どうも新バージョンではES2015の挙動に合うように動作が変更されているらしい。何が?というと、変数をexportするとimport側では読み取りのみとなる点である。これってES2015の規格に適合した動作なのかな? 規格書を読んで確認してみたいけど、先に進みたいのでとりあえず別の回避策で進めることにする。

ひょっとするとbabelifyを使っているから、トランスパイルした後のBrowserifyが出しているエラーかもしれないな。。