将垫片配置与杏仁一起使用
Using shim config with almond
我正在尝试填充某些模块以便与 almond 一起使用,如下所示:
<script>
requirejs.config({
shim: {
'jQuery': { exports: 'jQuery' },
//etc.
</script>
因为某些脚本已经包含在内。但是,这段代码:
require(['jQuery', function($) {
});
结果 "undefined missing jQuery"。如果我这样填充 jQuery:
define('jQuery', function() {
return jQuery;
});
有效。
我根本没有构建我的 JS,只是将 almond.js 放入现有的网络软件中,以便我可以使用 AMD 开发我的新组件。我想为我的新模块填充现有的全局变量。
我猜 shim 只在构建时解析,并且构建完全符合我上面所做的,对吗?
jQuery 的名称被硬编码为 "jquery"。如果您偏离这一点,您将 运行 惹上麻烦。但这不是你唯一的问题。
使用 shim
与使用模块名称调用 define
不同。当您像在问题中那样使用 shim
时,您告诉加载程序存在一个名为 jQuery
的模块,并且 一旦该模块被加载 ,RequireJS应该 return 作为模块值变量 jQuery
的值。强调的文本很重要:加载程序将获取并加载名为 jQuery
.
的模块
您在问题中显示的 define
通常会与对 require.config
的调用放在一起,在它之前或之后。这声明了一个名为 jQuery
的模块。因为module已经那里了,loader需要获取这个module的时候,没有什么可以取的。这是杏仁的重要区别。
杏仁有restrictions,其中之一是:
optimize all the modules into one file -- no dynamic code loading.
(强调已添加。)使用我在此答案中使用的术语,这意味着 "no fetching"。当你使用你的 define
电话时,你很好。当您使用 shim
时,那么 除非您将模块优化为一个文件 ,否则加载程序必须尝试获取模块。杏仁做不到。
我正在尝试填充某些模块以便与 almond 一起使用,如下所示:
<script>
requirejs.config({
shim: {
'jQuery': { exports: 'jQuery' },
//etc.
</script>
因为某些脚本已经包含在内。但是,这段代码:
require(['jQuery', function($) {
});
结果 "undefined missing jQuery"。如果我这样填充 jQuery:
define('jQuery', function() {
return jQuery;
});
有效。
我根本没有构建我的 JS,只是将 almond.js 放入现有的网络软件中,以便我可以使用 AMD 开发我的新组件。我想为我的新模块填充现有的全局变量。
我猜 shim 只在构建时解析,并且构建完全符合我上面所做的,对吗?
jQuery 的名称被硬编码为 "jquery"。如果您偏离这一点,您将 运行 惹上麻烦。但这不是你唯一的问题。
使用 shim
与使用模块名称调用 define
不同。当您像在问题中那样使用 shim
时,您告诉加载程序存在一个名为 jQuery
的模块,并且 一旦该模块被加载 ,RequireJS应该 return 作为模块值变量 jQuery
的值。强调的文本很重要:加载程序将获取并加载名为 jQuery
.
您在问题中显示的 define
通常会与对 require.config
的调用放在一起,在它之前或之后。这声明了一个名为 jQuery
的模块。因为module已经那里了,loader需要获取这个module的时候,没有什么可以取的。这是杏仁的重要区别。
杏仁有restrictions,其中之一是:
optimize all the modules into one file -- no dynamic code loading.
(强调已添加。)使用我在此答案中使用的术语,这意味着 "no fetching"。当你使用你的 define
电话时,你很好。当您使用 shim
时,那么 除非您将模块优化为一个文件 ,否则加载程序必须尝试获取模块。杏仁做不到。