わかりました、これを行うより良い方法が見つかりませんでした。しかし、Javascript コードを elisp モジュールに文字列として埋め込むことは...かなりうまくいくと判断しました。
それを実現するために、新しい elisp モジュールを作成する短い elisp 関数を書きました。xxxx.el ではなく、古い名前 xxxx-bundle.el に基づいて新しい名前を選択します。次に、元の .el ファイルの内容を新しい名前のファイルに書き込みます。setq
次に、単純なステートメントを同じファイルに書き込みます。Javascript プログラム全体が、そのステートメントのリテラル文字列値です。setq
簡単にするのは、pp-to-string
すべての Javascript コードを emacs での使用に適したリテラル文字列にエスケープする elisp の関数です。
バンドルを生成する fn は次のようになります。
(defun jsshell-produce-bundle (&optional jsshell-el bundle-el jsshell-js)
"Produce a new .el file, which contains all the jsshell.el
function and also embeds the jsshell.js source as a string. The
resulting .el file will then be suitable for a one-file
distribution of JSShell.
JSShell depends on two pieces: jsshell.el and jsshell.js. Rather
than distributing and installing two distinct files, the bundle
embeds the .js file into the .el file, for a one-file
distribution option. This function produces that one file.
Most people will never need to use this function. It's useful only
after modifying either the original jsshell.el or the jsshell.js file,
when you want to produce a new distributable bundle. In other words, it's
useful for the developer of jsshell.el.
"
(let ((jsshell-el (or jsshell-el
(concat (file-name-directory jsshell--load-path) "jsshell.el")
"jsshell.el")))
(let ((bundle-el (or bundle-el
(concat (file-name-directory jsshell-el) "jsshell-bundle.el")))
(jsshell-js (or jsshell-js
(and jsshell-js-tmpf
(file-readable-p jsshell-js-tmpf)
jsshell-js-tmpf)
jsshell-location-of-jsshell-js ;; orig dev wkstation
(concat (file-name-directory jsshell-el) "jsshell.js")))
jssrc)
(with-temp-file bundle-el
(insert (concat
";;; "
(file-name-nondirectory bundle-el)
" -- JSShell generated bundle\n"))
(insert (concat ";;\n;; generated " (current-time-string) "\n;;\n\n"))
(insert-file-contents jsshell-el)
(goto-char (point-max))
(insert "\n;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n")
(insert ";; this is the embedded Javascript code for the JS REPL\n\n")
(setq jssrc (jsshell--minimized-js-contents jsshell-js))
(goto-char (point-max))
(insert (concat "(setq jsshell-js-src "
(pp-to-string jssrc)
")\n"
"\n(provide '"
(file-name-sans-extension (file-name-nondirectory bundle-el))
")\n"
"\n;;; "
(file-name-nondirectory bundle-el)
" ends\n"))))))
コンテンツを最小化するヘルパー fn は、空白を折りたたんで連続した改行を削除するだけです。
結果の .el ファイルjsshell-js-src
は、最小化された Javascript ソースを含む変数 を参照できます。次のようになります。

このアプローチはおそらく他のモジュール、つまり別のデータ ファイルをバンドルする必要があるものでも役立つと思うので、ここに投稿します。