requireJS客户端/服务器模块与jQuery



我的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 进程中重用模型和部分视图的小项目。

最新更新