1

我的 requirejs 模块有一个服务器端和客户端的方法。模块也有 jQuery 依赖。我如何淹没服务器上的 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"
   }
});

一个.js

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

和 nodejs 代码(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();
});
4

1 回答 1

0

前言

您可能会仔细查看依赖项的用途,并尝试重构代码以摆脱服务器端模型(或服务器 sie 模型直接)的基本模型中的 jQuery 等依赖项。

即使在一个由 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();
});

此外,关于 RequireJs 文档,您可能想告诉 RequireJs 它在 NodeJS 中运行:

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

据我所知(重新)使用服务器端的模型不需要jQuery。(注意:我只构建了一个在 Grunt 流程中重用模型和部分视图的小项目。)

于 2014-04-13T07:41:41.643 回答