Javascript 在设计JS库时,我应该让它与RequireJS/AMD兼容还是不兼容?
如果我正在制作一个通用的JavaScript库,我应该如何处理RequireJS支持 据我所知,使您的代码或多或少符合RequireJS会使您在没有RequireJS的情况下无法使用。那我为什么要这么做Javascript 在设计JS库时,我应该让它与RequireJS/AMD兼容还是不兼容?,javascript,requirejs,amd,Javascript,Requirejs,Amd,如果我正在制作一个通用的JavaScript库,我应该如何处理RequireJS支持 据我所知,使您的代码或多或少符合RequireJS会使您在没有RequireJS的情况下无法使用。那我为什么要这么做 没有要求的人如何使用此代码 有没有一种方法可以在不分叉/分支的情况下支持这两种方法?我应该提供垫片代码吗 我理解正确吗 如果您只处理浏览器(而不是node.js),那么要使库同时支持AMD和非AMD,只需几行代码 例如,除四条外,其余均为注释: // Execute the factory t
- 没有要求的人如何使用此代码
- 有没有一种方法可以在不分叉/分支的情况下支持这两种方法?我应该提供垫片代码吗
- 我理解正确吗
// Execute the factory to produce jQuery
var jQuery = factory( window );
// Register as a named AMD module, since jQuery can be concatenated with other
// files that may use define, but not via a proper concatenation script that
// understands anonymous AMD modules. A named AMD is safest and most robust
// way to register. Lowercase jquery is used because AMD module names are
// derived from file names, and jQuery is normally delivered in a lowercase
// file name. Do this after creating the global so that if an AMD module wants
// to call noConflict to hide this version of jQuery, it will work.
if ( typeof define === "function" && define.amd ) {
define( "jquery", [], function() {
return jQuery;
});
}
我们可以找到一个非常类似的基因敲除片段:
请注意,jQuery采用这种方法,而knockout使用匿名模块。jQuery还将$
和jQuery
保留在全局命名空间中,而Knockout(可能还有许多其他)在检测到AMD时不会在全局命名空间中放置任何内容。每种方法都有利弊,如以下问题所示:
} else if (typeof define === 'function' && define['amd']) {
// [2] AMD anonymous module
define(['exports'], factory);
}