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

公開:2015-11-21 11:09
更新:2017-11-15 21:58
カテゴリ:javascript

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

http://swizec.com/blog/theres-a-bug-in-es6-modules/swizec/6753

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


"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が出しているエラーかもしれないな。。