Как загрузить библиотеку Underscore с RequireJS? - PullRequest
4 голосов
/ 24 сентября 2011
require(['underscore'], function ($, _) {
  ...
});

Не работает!(_ не является функцией)

Как это управлять?

Ответы [ 5 ]

7 голосов
/ 26 сентября 2013

Обратите внимание, что underscore.js не регистрирует себя в качестве модуля AMD (хотя это было в течение короткого времени в более ранних версиях), поэтому его нельзя использовать в вызове require () без какой-либо настройки с использованием "shim: "вот так:

require.config({
    paths: {
        jquery: 'lib/jquery.min',
        underscore: 'lib/underscore-min'
    }
    shim: {
        "underscore": {
            exports: "_"
        }
    }
});

См. Документы по адресу: http://requirejs.org/docs/api.html#config-shim

До того, как shim: был добавлен в require.js, вы могли сделать нечто подобное с плагином use.js (в случае, если вам нужно использовать более старую версию require.js).

На момент написания этой статьи текущая версия require.js - 2.1.8.

Кроме того, вы можете использовать lodash.js в качестве замены для underscore.js - он регистрируется как модуль AMD, так что вы можете использовать его без дополнительной настройки: http://lodash.com/

2 голосов
/ 11 ноября 2011

Мне кажется, проблема в том, что порядок аргументов передается вашему обратному вызову.

Должно быть:

require(['underscore'], function (_, $) {
 ...
});

Также вам необходимо использовать подчеркивание версии 1.2.1, которое добавило эту функцию.

0 голосов
/ 09 сентября 2012

Вот контрольные точки, чтобы убедиться, что все, что вам нужно, работает

  1. Получить require-jquery.js и поместить его в /js-root dir

  2. Добавьте в свой HTML, прямо перед закрывающим тегом </body>: <script data-main="/js-root/main-js-file-name" src="/js-root/require-jquery.js"></script>

  3. Получить подчеркивание адаптировано для AMD и поставьте также /js-root dir

  4. In main-js-file-name.js

запись:

require(["jquery", "underscore"], function ($, _) {
    ...
});

Аналогично, в ваших неосновных файлах AMD JS при определении модуля для использования _ напишите:

define(["jquery", "underscore"], function ($, _) {
    ...
    return theModuleObjectOrFunction;
});
0 голосов
/ 26 сентября 2011

все зависит от того, где находится сценарий. так как я не вижу, вы указали baseUrl, baseUrl будет по умолчанию, это означает, что либо 2 вещи:

  1. ваш скрипт находится прямо внутри html файла, а в вашем случае он поэтому будет искать underscore.js в том же каталоге HTML файл
  2. ваш скрипт находится в файле javascript, на который ссылается ваш html файл, теперь он будет искать underscore.js в каталоге вашего пользовательский файл JavaScript.

проверьте, есть ли там underscore.js.

0 голосов
/ 24 сентября 2011
require(["underscore"], function() { 
  console.log(_ === window._);
});
...