我正在尝试做的是调整我的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插件。
答案 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的标准。
答案 2 :(得分:0)
答案结果比我想象的要简单......
var $ = jQuery = require('jquery');
require('./jquery.csv.js');
调用'require'而不将其赋值给变量/名称空间的行为与脚本导入相同(即它可以操作全局名称空间中存在的对象)。
第一行负责正确初始化jquery。完成后,jquery-csv可以像在浏览器中一样修改现有的'$'命名空间。
第二个赋值'jQuery'是必要的,因为这是jquery-csv抓取对'jquery'实例的引用的地方。这可能缩短为仅分配给'$',但'jQuery'是插件指南为引用库指定的值。