脚本A
;(function(g){
define('hotness', [], function() {
function f() {;
console.log('gotem');
}
return f;
});
define('otherModule', [], function() {});
})(this);
脚本B
define([
'ScriptA',
], function() {
var hotness = require('hotness')
});
Error: Module name "hotness" has not been loaded yet for context: _
在ScriptB的ScriptA中定义要求的推荐方法是什么?
我也尝试过:
脚本B Alt
define([
'require',
'ScriptA',
'hotness'
], function(require) {
var hotness = require('hotness')
});
哪个给了我
Error loading resource ... /hotness.js: No such file or directory
Error: Script error for: hotness
编辑:
值得注意的是ScriptA保持原样,不会被修改。问题是如何从ScriptB获取ScriptA中的命名模块。
EDIT2:
我无法控制HTML或页面的任何其他方面。我必须在ScriptB中做所有事情。
EDIT3:
我有一个可行的例子,但它看起来像一个可怕的反模式解决方案所以我甚至不想提及它:
define(['require'], function(require) {
// why use window? IDK.
// this is just verbatim what is "working" for someone else
window.require(['scriptA'], function(sA) {
//sA never actually used
window.require([
'otherModule'
], function(oM) {
var hotness = require('hotness'),
答案 0 :(得分:1)
您应该使用bundles
configuration。鉴于您所描述的内容,您应该使用:
bundles: {
'scriptA': ['hotness', 'otherModule']
}
这基本上告诉RequireJS"当你想要找到hotness
或otherModule
然后加载scriptA
因为它们在那里定义了#34;。我不时地使用它来加载使用r.js
生成的包中的模块。
除此之外Joseph the Dreamer是正确的,你不应该在同一个模块中混合使用AMD和CommonJS获取依赖关系的方法。
答案 1 :(得分:0)
您的ScriptA使用命名模块。它们必须在RequireJS之后但在任何家属之前加载。 RequireJS does not recommend named modules除非您知道自己在做什么(比如像常规脚本一样加载库,并将其同时注册为模块)。
错误:尚未为上下文加载模块名称“hotness”:_
这是一个通用的RequireJS错误,当从服务器加载模块时,但不知何故RequireJS无法将其提供给依赖项。通常在模块出现语法错误或存在循环依赖性时发生。
ScriptB也存在问题。它试图同时使用AMD style(数组依赖关系)和CommonJS style(显式要求)。只需使用两种语法中的一种。请注意,在CommonJS格式中,它需要模块具有名为require
的第一个参数来触发CommonJS编写格式。
define(['hotness'], function(hotness) {
// use hotness
});
// or
define(function(require){
var hotness = require('hotness');
// use hotness
});
加载资源时出错...... /hotness.js:没有这样的文件或目录
务必设置基本网址。它可以是隐式的(基于data-main
location)或显式的(using require.config
)。模块名称通常是相对于基本URL的路径+文件名。
建议您为每个模块使用一个文件,其中包含没有名称的模块定义(文件名成为模块的名称),并位于集合baseUrl
下的某个位置。