jQuery как модуль AMD и оптимизация с помощью r.js - PullRequest
1 голос
/ 02 октября 2011

Хорошо, он вещь.Я использую curl.js для моего загрузчика AMD, но мне не нравится «втиснуть», потому что он должен быть запущен на Unix, а я занимаюсь разработкой на Windows.Таким образом, имеется в виду адаптер r.js для nodeJS из библиотеки RequireJS, потому что узел уже имеет двоичный файл для Windows.

Теперь jQuery в текущей версии (1.6.4) не является допустимым модулем AMD (в версии 1.7)и есть зависимости в компонентах jQueryUI, поэтому мне пришлось подделать так:

curl( [js!Core/jquery.js] )
    .then( function() {
        define('jquery', function() { return jQuery; });
    })

Мое приложение доволен этим.Однако использование r.js (версия 0.26.0) завершается с ошибкой со следующей ошибкой:

Tracing dependencies for: boot
function (){return jQuery}

node.js:207
    throw e; // process.nextTick error, or 'error' event on first tick
          ^
ReferenceError: jQuery is not defined
at eval at <anonymous> (r.js:7468:30)
at main (r.js:770:33)
at callDefMain (r.js:840:18)

Это мой app.build.js

({
    appDir: '../',
    baseUrl: 'Scripts/',
    paths: {
        'link': '../../../Lib/@Javascript Libs/curl.js/src/curl/plugin/link.js'
    },
    dir: 'built',
    optimize: 'none',
    modules: [
        { name: 'boot' }
    ]
})

А вот и полный boot.js для справки (coffeescript):

require([
    'link!styles/main.css'
    'js!Core/jquery.js!order'
    'js!Core/underscore.js!order'
    'js!Core/backbone.js!order'
]).then ->
    define 'jquery', -> jQuery

.next(['Router/MainRouter'])
.then (MainRouter) ->
    new MainRouter()
    Backbone.history.navigate('home') unless Backbone.history.start(
        pushState: false
    )

Заранее благодарю за любой намек, где может быть подвох ...

1 Ответ

0 голосов
/ 04 октября 2011

Правильно.RequireJS использует другой синтаксис в своей глобальной функции requirejs() (он же require()).RequireJs также не имеет "js!"плагин встроенный.Возможно, вам придется включить путь к нему в вашей конфигурации.Вы также можете использовать синтаксис RequireJS для немодульных файлов javascript.

Также: cram 0.2 будет поддерживать среды Windows, использующие Rhino.Мы пишем тесты для cram 0.2 и вскоре выпустим его.

Синтаксис RequireJS (удалите префикс js! И включите расширение .js):

require([
    'link!styles/main.css'
    'order!Core/jquery.js'
    'order!Core/underscore.js'
    'order!Core/backbone.js'
], function (maincss, jQuery, underscore, backbone) {
    // do something here
});
...