使用 requirejs 包含外部 js

Including external js with requirejs

我的 js 文件中有以下由 requirejs 调用的文件

    define([
      'jquery',
      'backbone',
      'mobiledetect'
    ],
 function($, Backbone, mobiledetect) {
  var MobileCheckView = Backbone.View.extend({
     initialize: function(){
     var md = new MobileDetect(window.navigator.userAgent);
     if (md.mobile() || md.phone() || md.tablet()) {
        $('#mho_app').popup('show');
     } 
     }
    });
     return MobileCheckView;
    }); 

我收到 Uncaught ReferenceError: MobileDetect is not defined when referenceing the external file via path in my main.js file

我也试过直接在文件顶部定义它,但没有成功。我错过了什么阻止脚本加载并给我对象?

    define('mobiledetect', ['https://cdnjs.cloudflare.com/ajax/libs/mobile-detect/1.3.6/mobile-detect.min.js'], function () {
       var md = new MobileDetect(window.navigator.userAgent);
       return md;
   });

我建议使用 RequireJS 中的 paths 配置将 mobiledetect 设置为 URL,就像这样。请注意,“.js”不在 URL 中。 RequireJS 将自动添加“.js”扩展名。

require.config({
  paths: {
    'mobiledetect': 'https://cdnjs.cloudflare.com/ajax/libs/mobile-detect/1.3.6/mobile-detect.min'
  }
});
require(['mobiledetect'], function (MobileDetect) {
  var md = new MobileDetect(window.navigator.userAgent);
  if (md.mobile() || md.phone() || md.tablet()) {
    alert('Mobile Device');
  }
  else {
    alert('Must be a desktop?');
  }
});

查看此 JSFiddle example 以查看代码的运行情况。您将收到一条警报,说明您是在使用移动浏览器还是桌面浏览器。

此外,参数 mobiledetect 应该是 MobileDetect 以匹配 new MobileDetect 调用。