Node.js npm-打包现有的js代码

Node.js npm-打包现有的js代码,node.js,npm,Node.js,Npm,我正在学习npm模块,并尝试将此模块打包为npm包 我已经阅读了关于如何创建npm的文档 我了解导出函数是必需的,我的问题是,我是否应该将以下函数包装为导出语句!?:-/ /*! * fullcalendar-rightclick v1.8 * Docs & License: https://github.com/mherrmann/fullcalendar-rightclick * (c) 2015 Michael Herrmann */ (function($) {

我正在学习npm模块,并尝试将此模块打包为npm包

我已经阅读了关于如何创建npm的文档

我了解导出函数是必需的,我的问题是,我是否应该将以下函数包装为导出语句!?:-/

/*!
 * fullcalendar-rightclick v1.8
 * Docs & License: https://github.com/mherrmann/fullcalendar-rightclick
 * (c) 2015 Michael Herrmann
 */

(function($) {
    function monkeyPatchViewClass(View) {
        View = View.class || View;
        var renderFn = 'render' in View.prototype ? 'render' : 'renderDates';
        var originalRender = View.prototype[renderFn];
        View.prototype[renderFn] = function() {
            originalRender.call(this);
            if (! this.el.data('fullcalendar-rightclick')) {
                this.registerRightclickListener();
                this.el.data('fullcalendar-rightclick', true)
            }
        };
        View.prototype.registerRightclickListener = function() {
            var that = this;
            this.el.on('contextmenu', function(ev) {
                var eventElt = $(ev.target).closest('.fc-event');
                if (eventElt.length) {
                    var seg = eventElt.data('fc-seg');
                    return that.trigger('eventRightclick', this, seg.event, ev);
                } else {
                    // Users of this library may add custom content inside
                    // FullCalendar's DOM structure, eg. popovers. We don't want
                    // to catch rightclicks on these custom elements, so we
                    // check that the clicked element actually lies inside one
                    // of FullCalendars default containers:
                    var fcContainer = $(ev.target).closest(
                        '.fc-bg, .fc-slats, .fc-content-skeleton, ' +
                        '.fc-bgevent-skeleton, .fc-highlight-skeleton'
                    );
                    if (fcContainer.length) {
                        var cell;
                        if (that.coordMap) {
                            // FullCalendar < 2.5.0:
                            that.coordMap.build();
                            cell = that.coordMap.getCell(ev.pageX, ev.pageY);
                        } else {
                            // FullCalendar >= 2.5.0:
                            that.prepareHits();
                            var hit = that.queryHit(ev.pageX, ev.pageY);
                            cell = that.getHitSpan(hit);
                        }
                        if (cell)
                            return that.trigger(
                                'dayRightclick', null, cell.start, ev
                            );
                    }
                }
            });
        }
    }
    var fc = $.fullCalendar;
    monkeyPatchViewClass(fc.views.agenda);
    monkeyPatchViewClass(fc.views.basic);
})(jQuery);
/*!
*fullcalendar右键单击v1.8
*文档和许可证:https://github.com/mherrmann/fullcalendar-rightclick
*(c)2015年Michael Herrmann
*/
(函数($){
函数monkeyPatchViewClass(视图){
视图=View.class | |视图;
var renderFn='render'在View.prototype中?'render':'renderDates';
var originalRender=View.prototype[renderFn];
View.prototype[renderFn]=函数(){
调用(this);
如果(!this.el.data('fullcalendar-rightclick')){
this.registerRightclickListener();
此.el.data('fullcalendar-rightclick',true)
}
};
View.prototype.registerRightclickListener=函数(){
var=这个;
此.el.on('contextmenu',函数(ev){
var eventElt=$(ev.target).closest('.fc event');
if(事件长度){
var seg=eventElt.data('fc-seg');
返回.trigger('eventRightclick',this,seg.event,ev);
}否则{
//此库的用户可以在其中添加自定义内容
//FullCalendar的DOM结构,例如Popors。我们不希望
//为了捕获这些自定义元素上的右键单击,我们
//检查单击的元素是否实际位于其中一个元素中
//FullCalendars默认容器的名称:
var fcContainer=$(ev.target)(
“.fc bg、.fc板条、.fc内容框架,”+
“.fc bgevent skeleton,.fc highlight skeleton”
);
if(fcContainer.length){
var细胞;
如果(that.coordMap){
//完整日历<2.5.0:
.coordMap.build();
cell=that.coordMap.getCell(ev.pageX,ev.pageY);
}否则{
//FullCalendar>=2.5.0:
这是我的;
var hit=that.queryHit(ev.pageX,ev.pageY);
cell=that.getHitSpan(hit);
}
如果(单元)
把那个还给我,扳机(
“dayRightclick”,空,cell.start,ev
);
}
}
});
}
}
var fc=$.fullCalendar;
monkeyPatchViewClass(fc.views.agenda);
monkeyPatchViewClass(fc.views.basic);
})(jQuery);

不,您不需要将模块代码包装到函数作用域中。
nodejs模块的内容在其自己的私有范围内执行,您可以使用module.exports将其内容公开给其他模块

你可能有兴趣阅读关于了解更多信息的文章

编辑:
刚刚意识到您正在尝试使用针对浏览器环境的第三方库。如果您想使用npm构建浏览器库,您通常会做的是将其与构建过程一起使用或作为构建过程的一部分使用,构建过程将把您的nodejs模块传输到浏览器可加载的脚本中,并为您插入所有必要的包件