使用 RequireJS 加载时如何不定义“定义”

How can "define" not be defined when loading with RequireJS?

本文关键字:定义 何不 RequireJS 加载 使用      更新时间:2023-09-26

我正在努力理解为什么加载了 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 时,它会抛出:

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

即使它用与 colorbox 完全相同的包装纸包装。

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

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

我还尝试删除define包装器,并像这样设置我的填充程序,这是文档建议的方式:

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

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

好的,

我使用 RequireJS 配置的填充部分找到了解决方法。我之前尝试过使用 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来做这样的事情,但是,哦,好吧,这算作一个解决方案,将来可能会帮助其他人。