【问题标题】:Require JS some dependencies are not found and error as 'undefined'需要 JS 一些依赖项没有找到并且错误为“未定义”
【发布时间】:2015-08-15 00:46:50
【问题描述】:

我使用 RequireJS 已经有一段时间了,但我仍在努力掌握它...

我有一个简单的项目,其中包含许多 JS 插件,据我了解,我通过 paths 对象将这些插件拉入,但有时,当我添加一个新插件并运行我的脚本时,我得到一个控制台错误,解释依赖是undefined

这是我的 JS:

require.config({
  "paths": {
    "jquery": "/content/themes/my-theme/bower_components/jquery/dist/jquery.min",
    "foundation": "/content/themes/my-theme/bower_components/foundation/js/foundation.min",
    "slick": "/content/themes/my-theme/bower_components/slick.js/slick/slick.min",
    "scrollmagic": "/content/themes/my-theme/bower_components/scrollmagic/scrollmagic/minified/ScrollMagic.min"
  },
  "shim": {
    "foundation": ["jquery"],
    "slick": ["jquery"]
  }
});

require(['jquery', "foundation", "slick", "scrollmagic"], function($) {

  /* --------------------
      Variables
  ---------------------*/
  var 
    bodyEl      = $( 'body' ),
    isOpen      = false,
    content     = $( '.content' ),
    openbtn     = $( '#open-button' ),
    closebtn    = $( '#close-button' ),
    controller  = new ScrollMagic.Controller();

  $(document).foundation();

  $(document).ready(function() {

    navInit();

    $('.main-slider').slick({
      dots: false,
      arrows: false,
      infinite: true,
      speed: 300,
      slidesToShow: 1,
      autoplay: true,
      autoplaySpeed: 4000
    });
  });
});

我的项目一直运行良好,直到我添加了最新的依赖项scrollMagic...在浏览器中运行时出现以下错误:Uncaught TypeError: Cannot read property 'Controller' of undefined

我曾考虑将其添加到 shim,但由于该插件(目前)还没有特别依赖于任何东西,所以它应该是必要的。

我在这里做错了什么?

【问题讨论】:

    标签: javascript requirejs


    【解决方案1】:

    就像你为jQuery添加$一样,你需要为你传入的其他模块添加参数

    require(['jquery', "foundation", "slick", "scrollmagic"], function($, foundation, slick, ScrollMagic) {
    

    这将起作用假设这些是 AMD 兼容模块

    如果没有,您需要填充它们并添加一个导出,将库变量分配给导出属性。这是来自http://requirejs.org/docs/api.html的示例

    shim: {
        'backbone': {
            //Once loaded, use the global 'Backbone' as the
            //module value.
            exports: 'Backbone'
        },
    

    【讨论】:

    • 啊,所以我一直误解shim 的作用......它本身不是依赖关系吗?在我添加 scrollmagic 之前,上面的代码运行良好。
    • 出于兴趣,有没有一种简单的方法可以检查我的模块是否与 AMD 兼容?还是你提到的方法行得通?
    • 来自文档 - shim:为不使用 define() 声明依赖关系的旧的、传统的“浏览器全局”脚本配置依赖关系、导出和自定义初始化并设置模块值。您应该能够通过检查库文档(或者只是谷歌的 requires + 该库)来检查您的脚本是否导出模块。或者您可以只搜索 module.exports 或 amd 的代码。或者您可以只检查答案中的内容并检查传入的参数是否具有值:-)
    猜你喜欢
    • 1970-01-01
    • 2014-04-22
    • 2012-03-10
    • 2020-01-13
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    相关资源
    最近更新 更多