我follow了dojo官网上Dojo and Node.js的教程,在客户端和服务端都使用Dojo Loader来实现异步加载,这样做的好处是显而易见的,实现了代码风格的统一,而且还可以利用dojo中诸如Deferred这样的对象,但是我也遇到一个头疼的问题:那就是Node.js的一些全局变量如__dirname无法使用了。因为使用了dojo的异步加载模式之后,除了启动脚本(启动Dojo Loader)外,Dojo Loader已经全面接管了原来Node.js的AMD Loader,访问__dirname只会得到undefined。这导致我无法正常使用Express的res.sendFile(filename,options)方法,因为options的root参数需要提供绝对路径,而dojo Loader貌似没有提供获得模块绝对路径的接口,仅有一个require.toUrl(mid)可以得到模块相对于baseUrl的路径,关于这个问题在dojo的论坛上我找到了同样的提问。dojo官网改版后连dojo论坛的入口也找不到了,我还是通过google才找到的,汗!而Dojo and Node.js的教程的作者Kitson Kelly给出的解释如图:
图中的链接我打开后并没有发现解决方案,(难道我英文太差了没看懂?)最后还是7楼主英明,给出了一个虽然ugly但是管用的方法,如图:
随后可以通过dojoConfig.baseDir来获得__dirname,不过如果谁有更好的解决方案请不吝赐教!