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'是插件准则指定用于引用库的值。