requireJS如何在define中按需加载模块?
场景:现有一个common.js模块为通用模块,代码为:
define(function(require, exports, module){
if(浏览器版本 < IE9){
require('html5');//加载html5.js插件
}
});
然后在A.html、B.html、C.html中都加载了common.js:
<script>require(['common'])/script>,
现在问题来了,会发现if(浏览器版本 < IE9)返回的是真还是假,始终都会加载html5.js,之前提了一个问题,为什么包裹在if语句中的require始终会执行呢?
在seajs中有require.async()可以真正按需加载,那么在requireJS中是否有相同的办法呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
requirejs遵循AMD规范,主要思想肯定就是异步加载咯,seajs遵循CMD规范,自然可以真正按需加载
如果你强行要按需加载的效果,我觉得那还是用seajs吧
不过你说的if中不能加载我还真没测出来这个bug
我这样写if中是不执行的!
题主的问题我还是没有遇到,这样if也是可以控制的
requirejs遵循AMD规范,但是也是可以在代码中使用CMD规范去写的,所以楼上建议用seajs没有必要,楼主提的问题,这里就是去判断然后按需加载。
因为requirejs运行时,会将代码转化为字符串,然后去匹配
callback.toString()
所以不论你有没有执行代码,都会去加载对应js,依赖前置