jQuery 和 Underscore 未在 RequireJS 中加载

Posted

技术标签:

【中文标题】jQuery 和 Underscore 未在 RequireJS 中加载【英文标题】:jQuery and Underscore not loading in RequireJS 【发布时间】:2013-01-08 16:38:23 【问题描述】:

我对 Backbone 还很陌生,今天才开始尝试学习 AMD。我从 RequireJS 的网站安装了 RequireJS-jQuery 库。所以这是我的脚本标签,里面有 Laravel 路径调用:

<script data-main=" path('js/main') " 
src=" path('js/libs/requirejs/require-jquery.js') "></script>

我正在尝试确保一切都正确加载,因此我正在尝试console.log 我的依赖项。 Backbone 返回一个对象就好了。下划线和 jQuery 没有。这是我的main.js 文件:

  require.config(
    baseUrl: '../js/',
    paths: 
        jquery: 'libs/jquery/jquery-1.8.3.min',
        underscore: 'libs/underscore/underscore-min',
        backbone: 'libs/backbone/backbone-min'
    
);

if ( typeof define === "function" && define.amd && define.amd.jQuery ) 
  define( 'jquery', [], function ()  return jQuery;  );


//the "main" function to bootstrap your code
require(['jquery', 'underscore', 'backbone', 'app'],
    function ()   
        var App = require('app');
        //App.initialize();
        console.log($);
        console.log(_);
        console.log(Backbone);
);

我有几个问题,我是否需要 jQuery 的路径,因为它是 RequireJS-jQuery 库的一部分?二,这是什么关于匀场?我需要垫片来让它工作吗?我正在使用 RequireJS-jQuery 的 v 2.1.4。

我尝试关注this post,但无法正常工作。我正在使用 AMD 版本的 Backbone 和 Underscore。 Underscore 和 jQuery console.log 为什么不会呢?

【问题讨论】:

当我说他们不会 console.log 我的意思是它返回 function() 【参考方案1】:

当通过 require.js 请求任何文件时,它必须符合标准 AMD 定义,以便 IIFE 定义参数。

例如,在 jQuery 库中,他们添加了一个导出定义:

if ( typeof define === "function" && define.amd && define.amd.jQuery ) 
  define( "jquery", [], function ()  return jQuery;  );

这允许您在 IIFE 中引用 $

Shimming 添加了一个导出定义(类似于上面的 jQuery),所以如果你愿意,你可以让 _、$ 和 Backbone 指向适当的引用......但就个人而言,我不依赖于参数,而是依赖全局评估,为 dependencies 设置必要的垫片,否则,对于我自己的所有模块(我确实将每个文件定义为 AMD 模块),我使用内联需要定义。

例如:

require(['jquery','underscore','backbone', 'my-module'],function()
    var MyModule = require('my-module');
);

希望以上内容有意义。

~根据你上面的代码,试试:

require(['jquery', 'underscore', 'backbone', 'app'],
    function ()   
        var App = require('app');
        //App.initialize();
        console.log($);
        console.log(_);
        console.log(Backbone);
);

【讨论】:

我试过了,但似乎没有用。 jQuery 仍然不是 console.logging。 好吧,我的观点更重要的是,不要依赖匿名函数中的参数定义,而是使用内联定义,并假设模块已经加载。即摆脱function ($, _, Backbone, App),而是使用'App'的内联require定义分配App,即require('app')和$或jQuery应该存在,因为你需要它。 你能编辑我的代码来告诉我你的意思吗,我似乎没有明白。 我就是这么想的。我仍然没有得到 jQuery 或 Underscore。 会不会有其他事情发生?

以上是关于jQuery 和 Underscore 未在 RequireJS 中加载的主要内容,如果未能解决你的问题,请参考以下文章

30 underscore

underscore 系列之链式调用

require() 方法讲解

Underscore.js入门

JavaScript underscore

关于npm