require.js填充程序选项在使用r.js和`empty:`时不起作用
require.js shim option does not work when using r.js and `empty:`
我使用的是jquery 1.11.3、require.js 2.1.18和r.js 2.1.18
我想把jquery.js放在外面,以便使用浏览器缓存。
//file js/main.js
require.config({
baseUrl: 'js',
paths: {
'jquery': '//cdn.bootcss.com/jquery/1.11.3/jquery.js'
},
shim: {
'p': ['jquery']
}
});
require(['jquery', 'p'], function($) {
alert(222);
});
//file js/p.js
//this is an jquery plugin which does not support AMD
alert($().jquery);
//file build.js
({
baseUrl: "js",
name: "main",
out: "app.js",
paths: {jquery: "empty:"}
})
这将导致错误
`Uncaught ReferenceError: $ is not defined(anonymous function) @ app.js:1`
但以下代码可以工作,警报("1.1.13"),然后警报(222)
//file js/main.js
require.config({
baseUrl: 'js',
paths: {
'jquery': 'jquery.js'
},
shim: {
'p': ['jquery']
}
});
require(['jquery', 'p'], function($) {
alert(222);
});
//file js/p.js
alert($().jquery);
//file build.js
({
baseUrl: "js",
name: "main",
out: "app.js",
paths: {jquery: "jquery"}
})
代码的第一部分出了什么问题谢谢~
RequireJS不允许做你想做的事情。shim
上的注释拼写为:
不要在构建中混合使用CDN加载和填充程序配置示例场景:您从CDN加载jQuery,但使用shim-config加载类似于依赖jQuery的Backbone的股票版本的内容。当您进行构建时,请确保在构建的文件中内联jQuery,并且不要从CDN加载它。否则,Backbone将被内联在构建的文件中,并且它将在加载CDN的jQuery之前执行。这是因为填充程序配置只会延迟文件的加载,直到加载依赖项,但不会自动包装define在构建之后,依赖项已经内联,shim-config不能将非define()代码的执行延迟到以后define()的模块在构建后可以使用CDN加载的代码,因为它们将源代码正确地封装在define工厂函数中,该函数在加载依赖项之前不会执行。因此,教训是:shim-config是非模块化代码、遗留代码的权宜之计。define()的模块更好。
(增加了重点。)
除非您将p
重写为一个合适的AMD模块,否则您必须放弃CDN。
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 使用agility.js进行页面布局和合成
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- 强制模板刷新ember.js
- 如何编写HTML输入的JS内联
- Angular JS IE9 Hashbang url rewriting
- 使用JS将数组转换为json对象
- Node.js v6.2.0类扩展不是函数错误
- 当js函数's已执行
- 要求未定义JS回调参数
- 在自定义mean.io包中使用angular-chart.js作为依赖项
- 无法在数据endVal中设置值=“”;{{ucount}}”;使用Angular JS的CountUp
- 如何从Java/scala调用js美化程序
- 如何更改<svg>标记为<img>用js标记
- 在mocha.js中使用Empty函数
- .empty()在我的ajax投票中使用PHP中的js不起作用
- 在Grunt.js中使用clean或clean-empty任务删除空文件夹
- require.js填充程序选项在使用r.js和`empty:`时不起作用
- Node.js express validator validate req.body is not empty