2013-10-15 2 views
1

Мой модуль requirejs имеет методы для сервера и клиента. Также модуль имеет зависимость jQuery. Как я могу заглушить загрузку Jquery на сервереrequirejs клиент/серверный модуль с jquery

Например

приложение структуру:

| -public 
| | -ext 
| | | -requirejs 
| | | | -require.js 
| | -lib 
| | | -a.js 
| | -main.js 
| -index.js 

main.js

requirejs.config({ 
    baseUrl: './lib/', 
    paths : { 
     "jquery" : "//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min" 
    } 
}); 

a.js

define("a", ["jquery"], function($){ 
    return { 
     serverMethod : function(){ 
     console.log("asdasdasd"); 
     }, 
     clientMethod : function(){ 
     //work with jquery 
     } 
    } 
}); 

и nodejs code (index.js)

var requirejs = require('requirejs'); 

requirejs.config({ 
    baseUrl: "./public/lib/" 
}); 

requirejs(["a"], function(a){ //Error: Tried loading "jquery" at ./public/lib/jquery.js then tried node's require("jquery") 
    a.serverMethod(); 
}); 

ответ

0

Предисловие

Вы могли бы повнимательнее посмотреть, что зависимость используется для и попытаться реорганизовать ваш код, чтобы избавиться от зависимостей, как JQuery в базовых моделях на стороне сервера модели (или Sie сервер модель напрямую).

Даже в очень огромном проекте, состоящем из моделей 10+, было только две модели, непосредственно использующие jQuery ajax (и если их создание на стороне сервера было бы проблемой, это можно легко перестроить).

Ответ

Я бы определить jquery с именем модуля в NodeJs и вернуть заглушку вместо этого.

Примечание: Я использую shim для определения модулей. Использование AMD-вилки как прямых модулей (которые некоторые люди препятствуют использованию) может не сработать.

var requirejs = require('requirejs'); 

requirejs.config({ 
    baseUrl: "./public/lib/" 
}); 

requirejs.define("jquery", [], function(){ 
    return {jQueryStub: true}; 
}); 

requirejs(["a"], function(a){ //Error: Tried loading "jquery" at ./public/lib/jquery.js then tried node's require("jquery") 
    a.serverMethod(); 
}); 

Кроме того, regarding to the RequireJs documentation, вы, вероятно, хотите сказать RequireJs, что он работает в NodeJS:

requirejs.config({ 
    nodeRequire: require, 
    baseUrl: "./public/lib/" 
}); 

Насколько я могу видеть (повторно) с использованием только модели на стороне сервера не требуется JQuery. (Примечание. Я только построил небольшой проект, который повторно использует модели и части представлений в процессе Grunt.)

Смежные вопросы