CommonJS – 我如何将jquery和jquery-plugin结合到$命名空间中

我想要做的是适应我的jQuery插件在Node.js上使用jQuery。

据我所知,CommonJS是最基本的forms,需要一个库封装在一个闭包中,闭包应该作为“exports”参数的参数。 这样,代码被整齐地包含在它自己的命名空间中(通过一个命名variables),并且不会污染全局命名空间。

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插件。

你应该你的插件中需要jQuery:

 var $ = require("jquery"); 

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

另请参阅使用UMD的jQuery插件示例

我能想到的最简单的方法就是像下面这样做:

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

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

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

$对象的修改应该按照jQuery插件的build议来完成。 我相信你已经意识到你说的话了。

我敢肯定有人会想出一个更聪明的方式:)但这应该现在工作。 你也可以直接返回一个修改过的jquery对象,然后把它分配给原来包含模块的作用域上的$对象。

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

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

调用“require”而不将其分配给variables/名称空间的行为与脚本导入相同(即,它可以操纵全局名称空间中存在的对象)。

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

第二个任务“jQuery”是必要的,因为这是jquery-csv抓取对“jquery”实例的引用的地方。 这可能会缩短为只分配给'$',但'jQuery'是插件准则指定用于引用库的值。