javascript - 用RequireJS加载时 "define"怎么会不定义呢?

标签 javascript requirejs amd

我很难理解为什么加载了 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 时,它抛出:

Uncaught ReferenceError: define is not defined

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

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

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

我也试过删除 define 包装器,并像这样设置我的 shim,这就是 documentation suggests to do it 的方式:

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

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

最佳答案

好的,我想出了一个使用 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 来处理这样的事情,但是,哦,好吧,这算是一个解决方案,可能会在将来帮助其他人。

关于javascript - 用RequireJS加载时 "define"怎么会不定义呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20006262/

相关文章:

javascript - 如何将 Materialise 与 RequireJs 一起使用

webpack - 使用 webpack 和 CommonsChunkPlugin 生成 AMD 模块

javascript - 我看到了 Node 模式,但不明白为什么?

单击链接时执行 Javascript 函数?

javascript - 带 Backbone 的 SPA 的 Require.js 优化器

javascript - 带有 RequireJs 和 TypeScript 的 KnockoutJs 组件

javascript - 未捕获类型错误 : undefined is not a function when using require. js

javascript - 找出Javascript中元素的n

javascript - 在 javascript 中使用 data-*

javascript - 仅在加载主干 View 时需要依赖项