我的文件结构如下:
/js
|-module/myModule.js
|-test.js
/vendor/
/spec
|-main.js
|-js/app.js
spec/main.js
是我的切入点,我从/js,
/vendor
,/spec
加载vendor
和spec
中的模块没有问题,因为这些模块是在假设baseUrl = '/'
的情况下构建的。
在/js
中加载模块时遇到问题,因为这些模块是在假设baseUrl = '/js'
的情况下构建的。
如何在不更改'/js'
?
以下是一个描述内联描述问题的示例。
规格/ main.js
(function () {
'use strict';
require.config({
baseUrl: '../'
});
});
define([
'spec/js/app' // it works
], function (app) {
'use strict';
app.initialize();
});
规格/ JS / app.js
(function(){
'use strict';
define([
'js/module/myModule' // it works
], function () {
// some code
});
});
JS /模块/ myModule.js
(function(){
'use strict';
define([
'test' // it does not works because
// it assumes that baseUrl equals '/js' and not '/'
], function () {
// some code
});
});
答案 0 :(得分:1)
首先,我错过了包装代码的匿名函数中的所有()。
例如,在这段代码中:
(function () {
'use strict';
require.config({
baseUrl: '../'
});
}()); // <-- missing ()
基本上,这段代码没有做任何事情,因为没有被执行。当您将代码包装在匿名函数中时(为了避免污染全局范围,使代码更容易最小化,...),您必须执行它!但是,当你写这篇文章时,这可能是一个错字。
我有几个解决方案,但我担心他们不能轻易解决你的问题,或者在100%的情况下解决问题(我不是说没有那个解决方案,我只是说我不喜欢不知道。
首先,您可以在require.config对象中定义 paths ,例如:
require.config({
baseUrl: '../',
paths : {
test : 'js/test.js'
}
});
这样你的代码就可以了。我知道这不是最好的解决方案,因为你必须在路径中为每个文件定义一个条目,我想你正在寻找更通用的解决方案。
使用路径,您始终可以在一个包(一组模块)的依赖项中设置前缀,这样您就可以在包中组织代码,并在该模块的任何依赖项中添加前缀。如果软件包有一个主文件,你可以根据需要将require.config的路径添加到PREFFIX,以链接到该模块当前位置的路径。
我能想到的另一个解决方案是在js中的模块中使用相对路径。如果你经常遇到这个问题,也许你应该从现在开始定义你的模块的依赖关系总是使用相对路径。所以
define([
'test'
], function () {
...
);
会变成:
define([
'../test'
], function () {
...
);
但是,因为我无法在任何真正的解决方案中考虑你的问题(为了解决这个问题而不改变你的js /文件代码中的任何东西),我建议你开始在你的包的依赖关系中使用相对路径,如果您习惯在不同项目中重用模块组。当然,以某种方式组织文件。
让我们看看是否有人为您的问题提供了真正的解决方案。