そもそも何しようとしてたか
.env
ファイルや環境変数等の情報を元に、使うモジュールが切り替わる場合、使われないモジュールを読み込まなければ、CPUやメモリのリソースを削減できそうだと思い、色々試してみていました。
結論としては、どうしても使われる可能性のあるモジュールは全部読み込ませないといけないようだ、ということに至りました。
何をしたか
import
文に可変な文字列を仕込む
const param = 'hoge_1';
import hoge from `./util/${param}.js`;
これに関しては、error: The module's source code could not be parsed: Unexpected token ```. Expected a string literal
と出ました。
同じように、
const param = 'hoge_1';
import hoge from './util/' + param + '.js';
も、The module's source code could not be parsed: Expected ';', got '+'
と、import
に渡すパラメータ絡みと思われるエラーが出ました。
import
文を分岐させる
import
に渡すパラメータを変化させられないのであれば、import
文周りを変化させれば良いではないか、と次善の策に出ました。
const param = 'hoge_1';
switch (param) {
case 'hoge_1':
import hoge from './util/hoge_1.js';
break;
default:
import hoge from './util/hoge.js'
}
このようにしてみましたが、The module's source code could not be parsed: 'import', and 'export' cannot be used outside of module code
と出ました。どうもimport
をif
やswitch
で分岐させることはできないようでした。
最終的に何したか
import
させるモジュールの切り替えには失敗しましたが、辛うじてコード内で使用するモジュールの切り替えは行えたので、それを紹介します。
import hoge_1 from './util/hoge_1.js';
import hoge_default from './util/hoge.js';
let hoge = /* なんかそれっぽい仮置きオブジェクト */;
const param = 'hoge_1';
switch (param) {
case 'hoge_1':
hoge = hoge_1;
break;
default:
hoge = hoge_default;
}
最後に
今回に関しては、実際にこれをやりたかったコードでは、切り替えるモジュール群が大したことない大きさだったので別に大丈夫だったのですが、私が思うに、この世にはクソデカモジュール群があると思うのです……。そういった場合にはモジュールを本当に切り替える必要が出てくるのではないかと思います。
もし、モジュールを切り替える方法が実はあるということがあれば、コメント等よろしくお願いします!