2011-10-02 3 views
1

D'accord, il est la chose. J'utilise curl.js pour mon chargeur AMD, mais je n'aime pas beaucoup de "cram" car il doit être exécuté sur unix et je développe sur Windows. Donc, l'adaptateur r.js pour nodeJS de la bibliothèque RequireJS vient à l'esprit, car le noeud a déjà un binaire pour Windows.jQuery comme module AMD et l'optimisation avec r.js

Maintenant jQuery dans la version actuelle (1.6.4) n'est pas le module AMD valide (en version 1.7 à venir) et il y a des dépendances dans les composants jQueryUI, donc je devais faire semblant comme ceci:

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

Mon application est heureux avec ça. Cependant, l'utilisation r.js (version 0.26.0) échoue sur cette partie avec l'erreur suivante:

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) 

Ceci est mon 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' } 
    ] 
}) 

Et voici complète boot. js pour référence (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 
    ) 

Merci d'avance pour toute indication où la capture peut être ...

+0

Oh, je pense savoir ce qui se passe là-bas. RequireJS ne fonctionne pas avec le chargement AMD basé sur les promesses, donc il ne comprend pas ces fonctions "then" et "next" et essaie de définir jquery avant qu'il ne soit vraiment chargé ... Des idées sur ce que je peux faire à ce sujet? – FredyC

Répondre

0

Correct. RequireJS utilise une syntaxe différente sur sa fonction globale requirejs() (alias require()). RequireJs n'a pas non plus le "js!" plugin intégré. Vous devrez peut-être inclure un chemin dans votre config. Vous pouvez également utiliser la syntaxe de RequireJS pour les fichiers javascript non-module.

En outre: cram 0.2 prendra en charge les environnements Windows utilisant Rhino. Nous écrivons des tests pour cram 0.2 et le publierons sous peu.

RequireJS syntaxe (supprimer js préfixe et inclure l'extension .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 
}); 
+0

Merci, dans l'attente de cram 0.2. – FredyC

Questions connexes