【问题标题】:How can "define" not be defined when loading with RequireJS?使用RequireJS加载时如何不定义“定义”?
【发布时间】:2013-11-15 16:48:54
【问题描述】:

我很难理解为什么加载了 RequireJS 的模块无法访问 define 函数。

在我的 HTML 中:

<script data-main="/assets/js/app/main.js" src="/assets/libs/require.js/2.1.9/require.js" type="text/javascript"></script>

main.js:

// Initialize Require.js
require.config({
   baseUrl: 'http://test.dev/cart/assets',
   paths: {
      jquery: 'https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min'
   }
});

// Main app logic
require( ['jquery', 
          'js/app/cart', 
          'js/app/wizard',
          'js/lib/colorbox', 
          'js/lib/jvfloat'], function ($, Cart, Wizard, ColorBox, jvfloat) {

    // Initialize Cart
    Cart.init();

    // Initialize Wizard
    Wizard.init();
}

);

在这方面,colorbox.js 加载得很好,并且包装如下:

define(['jquery'], function ( jQuery ) {
     // ...Colorbox code here
});

当它尝试加载 jvfloat.js 时,它会抛出:

未捕获的引用错误:未定义定义

即使它使用 exact 与 colorbox 相同的包装器进行包装。

我什至尝试过添加一个垫片(没有意义),看看我是否可以强制加载......但这也不起作用:

shim: {
   'jvfloat': {
      deps: ['require','jquery'],
      exports: 'jvfloat'
   }
}

我还尝试删除 define 包装器,并像这样设置我的垫片,这就是 documentation suggests to do it:

shim: {
    'jvfloat': {
        deps: ['jquery'],
        exports: 'jQuery.fn.jvfloat'
    }
}

TL;DR; 什么会导致 RequireJS 加载的库无法访问 define 函数?

【问题讨论】:

  • 如果 jvfloat 的包装方式与 colorbox 相同,为什么要使用 shimshim 用于没有define包裹的模块。
  • 我说我什至尝试过使用垫片。我理解它的目的。 jvFloat 是一个 jQuery 插件,因此,为了确保它具有它的依赖关系,我试图让它与 RequireJS 一起工作,并确保插件被添加到同一个 jQuery 实例中RequireJS 绕过。
  • 我想我专注于代码块并错过了上面的简短描述。我的错误...这看起来确实是一种非常奇怪的行为,define 在全局范围内,并且应该在它没有被遮蔽的任何地方都可见。

标签: javascript requirejs amd


【解决方案1】:

好的,我想出了一个使用 RequireJS 配置的 shim 部分的解决方法。我之前尝试过使用jvfloat 作为数组键,当时我应该使用完整的东西。所以这行得通:

require.config({
  baseUrl: 'http://test.dev/cart/assets',
  paths: {
     jquery: 'https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min'
  },
  shim: {
     'js/lib/jvfloat': {
        deps: ['jquery'],
        exports: 'jQuery.fn.jvfloat'
     }
  }
});

仍然不知道如何将define 用于类似的事情,但是,哦,好吧,这算是一种解决方案,将来可能会帮助其他人。

【讨论】:

    猜你喜欢
    • 2013-05-09
    • 2016-01-21
    • 2013-04-22
    • 1970-01-01
    • 2019-10-21
    • 2015-12-18
    • 1970-01-01
    • 2013-11-20
    相关资源
    最近更新 更多