终于解决:在客户端和服务端都用dojo Loader来实现异步加载后,Node.js的全局变量__dirname无法使用...

我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,不过如果谁有更好的解决方案请不吝赐教!

 

转载于:https://www.cnblogs.com/schwarz/p/4749436.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值