Requirejs 需要js初学者-依赖注入
我是require js的初学者,这里有一个疑问 我的文件结构如下:Requirejs 需要js初学者-依赖注入,requirejs,Requirejs,我是require js的初学者,这里有一个疑问 我的文件结构如下: root |____assets |____bootstrap-3.0.1 |________dist |____________js |____________bootstrap.min.js |________js |________angulajs.min.js |________app.js |________jquery.min.js |________underscorejs-min.js |___________
root
|____assets
|____bootstrap-3.0.1
|________dist
|____________js
|____________bootstrap.min.js
|________js
|________angulajs.min.js
|________app.js
|________jquery.min.js
|________underscorejs-min.js
|____________app
|________________main.js
requirejs.config({
"baseUrl": "assets/js",
"paths": {
": "app",
"jquery": "jquery.min",
"jquery-migrate": "jquery-migrate.min",
"twitter-bootstrap": "../bootstrap-3.1.0/dist/js/bootstrap.min",
"underscore": "underscore-min"
},
"shim": {
"twitter-bootstrap": {
deps: [ "jquery" ]
}
}
});
requirejs(["app/main"]);
define([ "jquery", "twitter-bootstrap" ], function($) {
$(function() {
$("#teste").tooltip();
});
});
我的app.js文件如下所示:
root
|____assets
|____bootstrap-3.0.1
|________dist
|____________js
|____________bootstrap.min.js
|________js
|________angulajs.min.js
|________app.js
|________jquery.min.js
|________underscorejs-min.js
|____________app
|________________main.js
requirejs.config({
"baseUrl": "assets/js",
"paths": {
": "app",
"jquery": "jquery.min",
"jquery-migrate": "jquery-migrate.min",
"twitter-bootstrap": "../bootstrap-3.1.0/dist/js/bootstrap.min",
"underscore": "underscore-min"
},
"shim": {
"twitter-bootstrap": {
deps: [ "jquery" ]
}
}
});
requirejs(["app/main"]);
define([ "jquery", "twitter-bootstrap" ], function($) {
$(function() {
$("#teste").tooltip();
});
});
我的main.js如下所示:
root
|____assets
|____bootstrap-3.0.1
|________dist
|____________js
|____________bootstrap.min.js
|________js
|________angulajs.min.js
|________app.js
|________jquery.min.js
|________underscorejs-min.js
|____________app
|________________main.js
requirejs.config({
"baseUrl": "assets/js",
"paths": {
": "app",
"jquery": "jquery.min",
"jquery-migrate": "jquery-migrate.min",
"twitter-bootstrap": "../bootstrap-3.1.0/dist/js/bootstrap.min",
"underscore": "underscore-min"
},
"shim": {
"twitter-bootstrap": {
deps: [ "jquery" ]
}
}
});
requirejs(["app/main"]);
define([ "jquery", "twitter-bootstrap" ], function($) {
$(function() {
$("#teste").tooltip();
});
});
我的问题是关于引导中的主文件和依赖项jquery。如果我声明引导依赖于jQuery,我还必须在define函数中包含“jQuery”?
我试图删除“jquery”声明,但依赖项没有被注入,我收到一个未定义的错误
谢谢你的帮助 这样做才是真正的出路:
define([ "jquery", "twitter-bootstrap" ], function($) {
$(function() {
$("#teste").tooltip();
});
});
在上面的代码中,很明显,$
应该绑定到jquery
模块。如果您这样做:
define(["twitter-bootstrap" ], function($) {
$(function() {
$("#teste").tooltip();
});
});
您正在将$
绑定到twitter引导
模块。如果没有进一步的配置,这将无法工作,因为twitter引导
不会导出任何内容。(它将自身安装为jQuery插件。)您可以通过如下设置垫片来解决此问题:
"shim": {
"twitter-bootstrap": {
deps: [ "jquery" ],
exports: '$.fn.tooltip',
init: function ($) { return $; }
}
}
但是,我不建议这样做,因为在不知道上下文(即不知道jquery
和twitter引导
模块之间的关系)的情况下遇到代码的人不会很容易知道发生了什么
在上面的垫片中,
exports
字段不是绝对必要的,但它可以帮助RequireJS知道何时加载了引导。它应该是一个符号,在加载引导程序之前不存在,但在加载引导程序之后存在。非常感谢您的帮助。我仍然从RequireJS开始,对我来说,如果我将jquery声明为twitter引导的依赖项,那么模块应该在添加插件之前加载依赖项,这似乎是正确的。但是,正如我所说,我开始了。