CommonJS - 如何将jquery和jquery-plugin组合到$ namespace中

时间:2012-10-03 21:05:41

标签: javascript node.js jquery-plugins commonjs

我正在尝试做的是调整我的jQuery-plugin以在Node.js上使用jQuery。

据我所知,CommonJS的最基本形式要求将一个库包装在一个闭包中,并且该闭包应该作为'exports'参数的参数提供。这样,代码整齐地包含在它自己的命名空间中(通过命名变量),并且不会污染全局命名空间。

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')。

是否有标准方法可以在单个命名空间上执行多个需求?如果没有,那么有一个可行的替代方案(在插件代码上做一个浅层复制)?

注意:匿名函数包装器遵循standard jquery guidelines

注意:此修补程序将应用于jquery-csv插件。

3 个答案:

答案 0 :(得分:2)

我能想到做这样的事情的最简单方法就是做以下事情:

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

这也意味着你可以做这样的事情:

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

$ object的修改应该根据jQuery插件的建议来完成。我相信你已经知道了你所说的话。

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

答案 1 :(得分:2)

您应该在 插件中使用jQuery

var $ = require("jquery");

这也是UMD (Universal Module Definition)中的技术,是CommonJS和AMD的标准。

另见example for a jQuery plugin with UMD

答案 2 :(得分:0)

答案结果比我想象的要简单......

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

调用'require'而不将其赋值给变量/名称空间的行为与脚本导入相同(即它可以操作全局名称空间中存在的对象)。

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

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