首页 > 解决方案 > 如何在定义期间从下一个模块访问 amd 模块

问题描述

我有这个工作代码。

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

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

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 配置 :-(

标签: requirejsamdjs-amd

解决方案


你的代码现在在做什么:

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

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

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


推荐阅读