我有一个使用某些第三方库的应用程序,因为我也有自己使用jQuery创建的一些插件。
重点是:某些第三方库使用$
和其他jQuery
作为命名约定。我通过RequireJS要求jQuery的方式就是:
[...]
var $ = require('jquery');
[...]
这样,我得到以下控制台消息作为return:
未捕获的ReferenceError:未定义jQuery jquery.scrolly.js:79
未捕获的TypeError:undefined不是函数
然后,我通过创建两个变量并在两者中都需要jQuery来找出候选解决方案:
var $ = require('jquery'),
jQuery = require('jquery');
所以,你可以看到这个"解决方案"是多余的,不必要的和不复杂的 - 我需要一致的东西,更好的东西。
有人可以与我分享想法吗?
答案 0 :(得分:1)
感谢Daniel A. White,我可以使用名为shim config的优雅解决方案。
让我们一步一步来做。我的HTML要求app.js
require.js
想要:{/ p>
<!DOCTYPE html>
<head>
<!-- ... -->
<script data-main="js/app" src="js/require.js"></script>
</head>
<body>
<!-- ... -->
</body>
</html>
这是我的 旧 js/app.js
:
require.config({
baseUrl: 'js',
paths: {
jquery: 'vendor/jquery-2.1.1.min',
modernizr: 'vendor/modernizr-2.6.2.min',
scrolly: 'vendor/jquery.scrolly'
}
});
require(['main']);
现在,魔法发生了 - 看看你自己的新js/app.js
:
require.config({
baseUrl: 'js',
paths: {
jquery: 'vendor/jquery-2.1.1.min',
modernizr: 'vendor/modernizr-2.6.2.min',
scrolly: 'vendor/jquery.scrolly'
},
shim: {
'scrolly': {
deps: ['jquery'],
exports: 'scrolly'
}
}
});
require(['main']);
这里的伟大之处在于RequireJS认为的简单性。据我所知, shim config 类似于库的“依赖管理器”。例如,scrolly
是一个已经加载的依赖于jQuery的第三方库 - 为什么我们应该再次加载它?没有必要!我们只需要将其有用性注入使用jQuery资源的scrolly
机制。
另一个流行的例子是BackboneJS。它的单一硬依赖是UnderscoreJS。要教Backbone可以使用Underscore,我们通过shim config提供依赖:
[...]
shim: {
'backbone': {
deps: ['underscore'],
exports: '_'
}
}
[...]
所以,就是这样。