パート1では、webpack を使って、モジュールを一つのファイルにまとめていました。 しかし、この方法では、webpack により、ExtendScript で実行できないjavascript記述が追加されてしまう不都合がありました。 そこで モジュールをひとつにまとめる機能を webpack の代わりに Rollup.js を使って解決することにします。
ここで使用するツールは Node.js と Make でそれぞれバージョンは以下の通り:
$ node -v
v12.16.2
$ make -v
GNU Make 3.81
それでははじめましょう。 プロジェクトとディレクトリを作成し、Rollup.js をインストールする:
$ mkdir sayhello2
$ cd sayhello2
$ npm init -y
$ npm install rollup@2.56.3 --save-dev
ここまでのところで、一旦 package.json を確認します:
{
  "name": "sayhello2",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "rollup": "^2.56.3"
  }
}
方針は以下のようにします。
要するに方針は前回と同じなので、 main.js, js_moduels/say.js を sayhello プロジェクトからコピーしてきます。
この段階でディレクトリ構成を確認します:
.
├── js_modules
│   └── say.js
├── main.js
├── node_modules/
├── package-lock.json
└── package.json
それでは rollup を使って、モジュールをまとめた一つのコードを生成します。
$ ./node_modules/.bin/rollup main.js --file main.jsx
生成された main.jsx を見てみましょう。
var sayHello = function(name){
	return 'Hello, '+name+'!';
};
var sayKonnitiwa = function(name){
	return 'こんにちは '+name+'!';
};
var console = {};
console.log = function(message){
	$.writeln(message);
};
console.log( sayHello('Taro') );
console.log( sayKonnitiwa('Hanako') );
そのまま結合された素直なコードになっています。 ExtendScript として、作動させるには、@target InDesign を追加する必要があります。 それを含めて、Makefile にまとめて記述しましょう。
Makefile:
main.jsx: main.js
	./node_modules/.bin/rollup $< --file $@
	echo "//@target InDesign" >> $@
clean:
	$(RM) main.jsx
make して main.jsx を生成します。
あとは、.vscode/lanunch.json を加えて、VSCode + ExtendScript Debugger で実行するだけです。

うまくいきました。
これで、ExtendScript 用の開発でもESMモジュールを使えるようになりました。 今度は ES6 Javascript 記述を使って ExtendScript 用のコードを書くに挑戦します。