【问题标题】:vanilla JS : module bundled or notvanilla JS:模块捆绑与否
【发布时间】:2016-11-23 15:08:19
【问题描述】:

给定一组模块模式文件(一个主要文件和各种子文件),

有没有办法检测模块是否捆绑到一个文件中?在最后一种情况下,我将手动加载带有通过 JS 添加的头脚本 src="" 标记的模块。

非捆绑文件用于开发,捆绑文件用于生产。

编辑代码是 ES 5 !

我不考虑使用 Browserify、Require 等等...

我用(非常基本的)gulpfiles(使用 concat、wrap)组装我的代码

有人有想法吗?

【问题讨论】:

  • ES 5 / 2015 ES6 = ES2015,不同于 ES5。 + 你的问题不清楚
  • ES 五个,而不是六个...“传统”JS...我希望能够使用 Apache Cordova 在旧的移动 WebViews 中呈现,事实上...
  • 为什么需要知道文件是否被捆绑?是为了让您知道如何将它们包含在您的 index.html 中吗?如果是,您可以使用 gulp-userefgulp-inject 之类的东西,他们会为您处理此问题
  • 只是为了帮助我在控制台中的调试工作(未捆绑)而不是显式加载子模块(捆绑版本)...谢谢您的帮助!

标签: javascript design-patterns module


【解决方案1】:

假设您的捆绑文件名称中有一些内容表明它是捆绑包,您可以检查加载了哪个脚本。例如,如果您在开发模式中加载 TopModule.js 而在生产中加载 TopLevel.min.js,您可以将此检测放在 TopLevel 模块中:

var isBundled = (function () {
    var src = '';

    if ('undefined' !== typeof (document.currentScript) && document.currentScript.src) {
        src = document.currentScript.src;
    }
    else {
        (function () {
            var allScriptElements = document.scripts || document.getElementsByTagName('script'),
                    i;

            for (i = 0; i < allScriptElements.length; ++i) {
                if (/(TopLevel(\.min)*)\.js/i.test(allScriptElements[i].src)) {
                    src = allScriptElements[i].src;

                    break;
                }
            }
        }());
    }

    return /\.min\.js/i.test(src);
}());

【讨论】:

  • 我终于决定使用@Corina 提出的技术,这对我很有用!感谢回复!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-06
  • 2011-11-18
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多