我的requirejs模块有一个用于服务器端和客户端的方法。模块也有jQuery依赖关系。我如何淹没服务器上的jquery加载
例如
应用结构:
| -public
| | -ext
| | | -requirejs
| | | | -require.js
| | -lib
| | | -a.js
| | -main.js
| -index.js
主.js
requirejs.config({
baseUrl: './lib/',
paths : {
"jquery" : "//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min"
}
});
答.js
define("a", ["jquery"], function($){
return {
serverMethod : function(){
console.log("asdasdasd");
},
clientMethod : function(){
//work with jquery
}
}
});
和 nodejs 代码(索引.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();
});
前言
您可以仔细查看依赖项的用途,并尝试重构代码以摆脱服务器端模型(或直接使用服务器 sie 模型)的基本模型中的 jQuery 等依赖项。
即使在一个由 10+ 个模型组成的非常庞大的项目中,也只有两个模型直接使用 jQuery ajax
(如果在服务器端重新使用它们是一个问题,这可以很容易地重构)。
答
我会在 NodeJs 中定义一个jquery
命名的模块并返回一个存根。
注意:我正在使用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();
});
此外,关于 RequireJs 文档,您可能想告诉 RequireJs 它在 NodeJS 中运行:
requirejs.config({
nodeRequire: require,
baseUrl: "./public/lib/"
});
据我所知,(重新)仅使用服务器端的模型不需要jQuery。(注意:我只构建了一个在 Grunt 进程中重用模型和部分视图的小项目。