Requirejs 需要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 |___________

我是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
|____________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引导的依赖项,那么模块应该在添加插件之前加载依赖项,这似乎是正确的。但是,正如我所说,我开始了。