如何在定义期间从下一个模块访问 amd 模块

How get access to amd module from next module during define

我有这个工作代码。

define(['https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.0/axios.min.js'],function(axios) { 
    axios.post('/user');
});

但我想在下一个模块中使用 axios r.js

define([
    'https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.0/axios.min.js',
    'https://example.com/r.js], function(axios) { 
    return r; 
}); 

但是axios是未定义的。

r.js

var r = function () {
  console.log('worked') // worked
  axios.post('/user'); // axios undefined
}

可能吗?我无法访问 requre.js 配置 :-(

您的代码现在正在做什么:

  • 你定义了一个有两个依赖的模块,axiosr
  • requirejs 开始异步下载两个文件
  • r 是常规脚本(不是 amd 模块)并且没有 axios 作为依赖项
  • 如果 r 先加载,那么你有 axios 未定义
  • 如果 axios 首先加载它会将自己注册为 amd 模块并且它作为全局不可见,所以你有 undefined

您问题的第一个解决方案是将 r 重写为 amd 模块并指定 axios 作为其依赖项。

第二种解决方案是通过 shim.

axios 指定为 r 的依赖项