6

我正在尝试做的是调整我的 jQuery 插件以在 Node.js 上与 jQuery 一起使用。

据我了解,CommonJS 最基本的形式需要将库包装在闭包中,并且该闭包应作为“导出”参数的参数提供。这样,代码就整齐地包含在自己的命名空间中(通过命名变量),并且不会污染全局命名空间。

jQuery 本身应该属于 '$' 命名空间。

翼:

var $ = require(jquery);

但我的插件也应该适合“$”命名空间。

插件代码:

(function( $ ) {
  // plugin code goes here
})(jquery);

exports.jquery = jquery // will this work?

前任:

var $ = require(jquery);
$ = require(jquery-csv.js); // will this work?

要在浏览器中工作,所有内容都设置为可从“$”命名空间调用,即使我的模块设置为“$”的子命名空间(即“$.csv”)。

是否有一种标准方法可以在单个命名空间上执行多个要求?如果没有,是否有可行的替代方案(例如对插件代码进行浅拷贝)?

注意:匿名函数包装器遵循标准 jquery 指南

注意:此修复将应用于jquery-csv插件。

4

3 回答 3

2

您应该在插件中使用jQuery :

var $ = require("jquery");

这也是UMD(通用模块定义)中的技术,它是 CommonJS 和 AMD 的标准。

另请参阅带有 UMD 的 jQuery 插件示例

于 2013-07-10T12:26:48.457 回答
1

我能想到的最简单的方法是执行以下操作:

var $ = require("jquery");
require("jquery-csv")($);

这也意味着你可以这样做:

module.exports = exports = function (jquery) {
    //You modify the jquery object here.
};

$ 对象的修改应该按照 jQuery 插件的建议进行。我相信你已经对你所说的有所了解。

我相信有人会想出一个更聪明的方法:) 但这现在应该可行。您也可以只返回一个修改后的 jquery 对象,然后将其分配给您最初包含该模块的范围内的 $ 对象。

于 2012-10-03T21:21:32.250 回答
0

事实证明,答案比我想象的要简单......

var $ = jQuery = require('jquery');
require('./jquery.csv.js');

调用“require”而不将其分配给变量/命名空间与脚本导入的作用相同(即它可以操作存在于全局命名空间中的对象)。

第一行负责正确初始化 jquery。完成后,jquery-csv 可以像在浏览器中一样修改现有的 '$' 命名空间。

第二个赋值 'jQuery' 是必要的,因为这是 jquery-csv 获取对 'jquery' 实例的引用的地方。这可能会缩短为仅分配给“$”,但“jQuery”是插件指南为引用库指定的值。

于 2012-10-03T23:03:30.557 回答