让我们假设这是我的 config.js 或 main.js:
require.config({
// paths are analogous to old-school <script> tags, in order to reference js scripts
paths: {
jquery: "libs/jquery-1.7.2.min",
underscore: "libs/underscore-min",
backbone: "libs/backbone-min",
jquerymobile: "libs/jquery.mobile-1.1.0.min",
jquerymobilerouter: "libs/jquery.mobile.router.min"
},
// configure dependencies and export value aliases for old-school js scripts
shim: {
jquery: ["require"],
underscore: {
deps: ["jquery"],
exports: "_"
},
backbone: {
deps: ["underscore", "jquery"],
exports: "Backbone"
},
jquerymobilerouter: ["jquery", "backbone", "underscore"],
jquerymobile: ["jquery", "jquerymobilerouter", "backbone", "underscore"]
}
});
require(["jquery", "backbone", "underscore", "app/app.min", "jquerymobilerouter", "jquerymobile"], function ($, Backbone, _, App) {
console.log($);
console.log(Backbone);
console.log(_);
$("body").fadeIn(function () {
App.init();
});
});
paths
配置选项允许您引用脚本,a-la <script>
HTML 中的标记。假设是这种情况,我是否还需要使用 $
为 jQuery 等脚本添加别名?或下划线 _
在我下面的实际要求声明中?考虑到如果您使用标准 <script>
引用 jQuery,我不得不这样做似乎很奇怪。标签,$
可以在整个脚本中自动使用。使用 paths
不应该是一样的? shim
config 选项,据我所知已经取代了弃用的 order!
插入。 exports
有什么用属性(property)居然做?它似乎没有为脚本创建别名;例如,如果我设置 exports
下划线到 "whatever"
,然后尝试 console.log(whatever)
,未定义。那么有什么意义呢? $
的正确方法是什么?我的 App.js 模块中的别名,或“app”文件夹中的任何其他模块?我是否必须在每个单独的模块和别名中都需要 jQuery $
每一次?或者我在这里做的方式是正确的吗? 我也非常感谢对这个特定脚本的任何其他批评;在我看来,Require.js 的文档还有很多不足之处;我真的很想了解更多的事情似乎被掩盖了,让我摸不着头脑。
最佳答案
例如,我有这样配置的东西:
"paths": {
"jquery": "require_jquery"
},
"shim": {
"jquery-cookie" : ["jquery"],
"bootstrap-tab" : ["jquery"],
"bootstrap-modal": ["jquery"],
"bootstrap-alert": ["jquery"]
},
这意味着每次在模块中我都这样做
define( ['jquery']
requirejs 加载文件
require_jquery
从主路径而不是尝试加载 jquery.js。在您的情况下,它将加载 jQuery 源文件,然后全局可用。我个人不喜欢这种方法,因此在 require_jquery.js 文件中我这样做:define( ["jquery_1.7.2"], function() {
// Raw jQuery does not return anything, so return it explicitly here.
return jQuery.noConflict( true );
} );
这意味着 jQuery 将仅在我的模块中定义。 (这是因为我编写了 Wordpress 插件,所以我可以在不涉及外部版本的情况下包含我自己的 jQuery 版本)
_
编辑 - 回答评论。
我认为 requirejs 在必须从 CDN 加载 jQuery 后退时需要它们。我认为 requirejs 首先尝试从 CDN 加载 jQuery,然后通过检查“exported”变量是否存在来验证它是否正确加载,如果不存在,则从本地文件系统加载它(如果你当然,已经配置了回退)。这是当 requirejs 看不到 404 返回时需要的东西。
$
和 jQuery
(或者你可以像我那样做并避免这种情况)。内define()
函数,您可以将 jQuery 别名为您想要的任何名称。define( [ 'jquery' ], function( jq ) {
// jq is jquery inside this function. if you declared it
// globally it will be also available as $ and jQuery
} );
关于javascript - Require.js 正在伤害我的大脑。关于加载脚本/模块的方式的一些基本问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11031485/