gpt4 book ai didi

javascript - 如何加载采用不同 baseUrl 的模块

转载 作者:行者123 更新时间:2023-11-30 05:57:12 26 4
gpt4 key购买 nike

我的文件结构如下所示:

/js
|-module/myModule.js
|-test.js
/vendor/
/spec
|-main.js
|-js/app.js

spec/main.js 是我的入口点,我从它加载模块到 /js, /vendor, /规范

我可以毫无问题地加载 vendorspec 中的模块,因为这些模块是在假设 baseUrl = '/' 的情况下构建的。

我在 /js 中加载模块时遇到问题,因为这些模块是在假设 baseUrl = '/js' 的情况下构建的。

如何在不更改 '/js' 脚本代码的情况下解决此问题?

这是一个内嵌注释描述问题的示例。


spec/main.js

(function () {
'use strict';
require.config({
baseUrl: '../'
});
});

define([
'spec/js/app' // it works
], function (app) {
'use strict';
app.initialize();
});

spec/js/app.js

(function(){
'use strict';
define([
'js/module/myModule' // it works
], function () {
// some code
});
});

js/module/myModule.js

(function(){
'use strict';
define([
'test' // it does not works because
// it assumes that baseUrl equals '/js' and not '/'
], function () {
// some code
});
});

最佳答案

首先,我缺少包装您代码的匿名函数中的所有 ()。

例如,在这段代码中:

(function () {
'use strict';
require.config({
baseUrl: '../'
});
}()); // <-- missing ()

基本上,这段代码什么都不做,因为它没有被执行。当你将你的代码包装在一个匿名函数中时(为了避免污染全局范围,让你的代码更容易最小化,......)你必须执行它!但这可能是您写这篇文章时的错别字。

我有几个解决方案,但恐怕它们不能轻易或 100% 地解决您的问题(我并不是说没有那个解决方案,我只是说我不知道不知道)

首先,您可以在 require.config 对象中定义路径,例如:

require.config({
baseUrl: '../',
paths : {
test : 'js/test.js'
}
});

这样你的代码就可以工作了。我知道这不是最好的解决方案,因为您必须在路径中为每个文件定义一个条目,我猜您正在寻找更通用的解决方案。

使用路径,您始终可以在一个包(一组模块)的依赖项中设置一个前缀,这样您就可以在包中组织代码,并在该模块的任何依赖项中添加前缀。如果包有一个主文件,您可以根据需要将路径添加到 require.config 的 PREFFIX 以链接到该模块当前位置的路径。

我能想到的另一个解决方案是在 js 中的模块中使用相对路径。如果你经常遇到这个问题,也许你应该从现在开始定义一个你的模块的依赖,总是使用相对路径。所以

define([
'test'
], function () {
...
);

会变成:

define([
'../test'
], function () {
...
);

但是,由于我想不出任何真正的解决方案来解决您的问题(在不更改 js/文件代码的情况下解决这个问题),我建议开始在包的依赖项中使用相对路径,如果您习惯于在不同项目之间重用一组模块。当然,以某种方式组织文件。

让我们看看是否有人对您的问题有真正的解决方案。

关于javascript - 如何加载采用不同 baseUrl 的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11101298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com