require.js 使用经验

1. 每个模块文件(module)的定义部分 define 里面写的 路径都是基于这个js文件所在位置来写的,比如 './../../app/views/login/login', 切记加上开头的./ 。因为在firefox 和 谷歌浏览器中对路径的自动补全是不一样的 , chrome会加上 ./ 而 firefox 不会,所以相同的路径:'../../app/views/login/login' 在firefox 中自动补全是这样的 '/spec/../../app/views/login/login' 而在 chrome 中是 './spec/../../app/views/login/login' 。
你可能会问这会有什么问题呢?问题在于 require.js 加载 js的原理是动态的用 node=document.createElement('<script>') 后再把 node.src = url (就是我们刚刚写的自动补全的路径) 。但是我们知道相对路径如果以 / 开头意思是相对于域名+端口号后的/开始的,而不是这个文件所在的文件夹的路径开始的。所以 '/spec/../../app/views/login/login' 会变成 node.src = 'http://localhost:8080/app/views/login/login' 。因为 /spec 这个文件从根目录开始找的话是不存在的,下一个动作 ../ 就变成了 localhost:8080 ,下一个动作 ../ 结果后还是  localhost:8080,下一个动作 /app/views/login/logon 这回Url被接上了就变成了 http://localhost:8080/app/views/login/login 。 而如果你在路径的头部写了 ./   就不会出现这个错误,所以相对路径开头写上 ./ 是良好的编程习惯。
进一步的研究表明,在 require.config.path 里面定义 appBaseUrl:'./../app' 这样的写法,将 ../ 这类不好看的路径写在 path 定义里面,然后define头写上 'appBaseUrl/views/login/login' ,这种写法更好。
例外情况:在 require.config.path 里面定义的路径比如 backbone:'./../asset/lib/backbone/backbone.wrapper' 这个里面的 backbone.wrapper.js 文件虽然也是写成 define([...],function());的形式,但是它的define参数内的路径却是以main.js 文件所在路径为起始的


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值