包装器允许模块使用AMD/CommonJs或脚本标签?

Geo*_*uer 16 javascript amd boilerplate commonjs dynamic-script-loading

我只是试图包装我们的一个模块,这些模块通过<script>一些样板中的标签包含在内,以允许可选的AMD加载requirejs.

这是非常痛苦的,我能想到的最好的是:

(function(){
var exports, jQuery;
if (typeof window.define === 'function' && typeof window.requirejs === 'function') {
    exports     = {};
    define(['jquery'], function (jq) {
        jQuery = jq;
        return thisModule();
    });
} else {
    exports     = window;
    jQuery      = window.jQuery;
    thisModule();
}


function thisModule() {
}

})();
Run Code Online (Sandbox Code Playgroud)

请注意,这是

  • 很多样板
  • 需要你在变量中声明依赖项(在这种情况下,谢天谢地只有jQuery)和amd
  • 如果我想拥有CommonJs支持,需要更多代码.

我主要关心的是第二点,因为当我超越包装我们的核心文件时,它将会变得很糟糕.我确定那里有一些整洁的(呃)包装器实现,但我找不到任何.

有人有任何提示吗?

For*_*ter 8

你试图重新创建已经存在的东西,我做了完全相同的事情,在我的StackOverflow问题中提出了一个稍微不同的解决方案.

简而言之,您需要知道的名称是"通用模块定义",并且有一个位于https://github.com/umdjs/umd的GitHub ,具有各种不同的实现.