暂时没有时间提供一个合适的重现示例,但基本问题可以用以下示例说明
`
~/c/boot-cljs-example (master=) node target/main.js
module.js:338
throw err;
^
Error: Cannot find module '/Users/martin/code/boot-cljs-example/out/goog/bootstrap/nodejs.js'
at Function.Module._resolveFilename (module.js:336:15)
at Function.Module._load (module.js:278:25)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at Object.<anonymous> (/Users/martin/code/boot-cljs-example/target/main.js:6:1)
at Module._compile (module.js:460:26)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Function.Module.runMain (module.js:501:10)
~/c/boot-cljs-example (master=) cd target/
~/c/b/target (master=) node main.js
Starting...
`
这是使用 boot 编译的,因为这是我目前手头的工具。编译后的 shim 如下所示
`
var path = require("path");
try {
require("source-map-support").install();
} catch(err) {
}
require(path.join(path.resolve("."),"out","goog","bootstrap","nodejs.js"));
require(path.join(path.resolve("."),"out","cljs_deps.js"));
goog.global.CLOSURE_UNCOMPILED_DEFINES = {"cljs.core._STAR_targetSTAR":"nodejs"};
goog.require("boot.cljs.main");
goog.require("cljs.nodejscli");
`
这里的问题在于 {{path.resolve(".")}} 将返回 ${node} 命令调用的目录,而不是 shim 的目录。(请参见上面的 "Cannot find module..." 错误)
一种可能的解决方案是使用 {{__dirname}},它始终解析为当前文件的目录。这可能会对现有的设置造成一些破坏。