現在の JavaScript はダイナミックインポートが可能。
下記ページで Chrome や Safari で動くと解りますね。
全モダンブラウザで使えるJavaScriptのdynamic import(動的読み込み) – Qiita
GNOME の Gjs は imports 関数があるので関係ないんだけど。
そういえば macOS の JXA はファイル分割ができないのが困る。
コレを利用してクラス毎に分割できるかな。
#!/usr/bin/osascript
import('./sub.js')
.then((module) => {
console.log('Start!');
const sub = new module.Sub();
sub.subMethod();
});
main.js
export class Sub {
subMethod() {
console.log('this is Sub Class Method');
}
}
sub.js

なんでだよ!
Promise だと認識はしているけど動作しないってことみたい。
JavaScriptCore が全部やってくれるってわけじゃないんかい。
Gjs でも同じかな?
console.log を print に書き換えて実験。
#!/usr/bin/gjs
import('./sub.js')
.then((module) => {
const sub = new module.Sub();
sub.subMethod();
});
main.js
export class Sub {
constructor(app) {
print('Hello');
}
subMethod() {
print("this is Sub Class Method");
}
}

動いたのでコンストラクタも入れてみた、普通に Class ですね。
いや Gjs は imports を使ったほうが簡単ですけど。
というか、Apple は内製スクリプトには本当にヤル気が無いなって。