我有一个这样的项目:
在我的test/test.html
文件中,我有以下
<script type="text/javascript" src="../lib/curl.js" charset="utf-8"></script>
<script type="text/javascript" charset="utf-8">
curl(['../src/foo'], function (Foo) {
console.log(Foo);
});
</script>
这失败了,我看到的唯一工作是在加载curl.js之前包含以下内容:
<script>
curl = {
paths: {
src: '../src'
}
};
</script>
所以我的第一个问题是,如果我只想链接到src/
目录中的单个文件,为什么必须以这种方式设置路径。
假设第一个问题已修复,我的第二个问题在src/foo.js
范围内。我希望在该文件中依赖lib/bar.js
,所以我写下以下内容:
define(['../lib/bar'], function (Bar) {
return Bar;
});
唉,这不起作用,因为curl.js试图按照我的意愿加载test/lib/bar.js
而不是lib/bar.js
。如果唯一的选择是为curl指定paths
对象,是否可以在src/foo.js
模块中执行此操作,还是必须在test/test.html
文件中完成所有操作?
答案 0 :(得分:3)
所以我的第一个问题是,如果我只想链接到src /目录中的单个文件,为什么我必须以这种方式设置路径。
好问题。看起来它可能被称为bug。我们应该解决这个问题,但是imho,它不是一个重要的问题。让我解释一下......
curl.js面向复杂项目,其中模块捆绑到“包”中 - 在概念上与CommonJS / NodeJS包非常相似。在包中,使用“../”从包中导航到另一个包是没有意义的。事实上,我们中的许多人都认为这会产生错误。不幸的是,curl.js在这种情况下默默地失败了(这绝对是一个bug imho)。
您看到的错误可能是当您不使用包时curl.js正在应用包导航逻辑。 (嗯,听起来更像是一个臭虫给我。:))
因此,通常,curl.js需要配置。这个配置中最重要的部分是baseUrl。 baseUrl告诉curl应用程序的根所在的位置。在你的情况下它是“..”(你也可以把它写成“../”但是curl会在内部切掉尾随的“/”。
您不必使用全局预先配置curl。您也可以在第一次调用curl()时包含配置。
curl({ baseUrl: '..' }, ['src/foo'], function (Foo) {
console.log(Foo);
});
我认为这也回答了你的第二个问题。您可以使用baseUrl而不是配置路径。但是,一旦开始组织模块,路径最终会派上用场。例如,路径可以将像“lib / jquery-1.8.0 / jquery.min.js”这样的混乱路径转换为“jquery”。
curl({ baseUrl: '..', paths: { "lib/jquery-1.8.0/jquery.min.js": "jquery" });
我实际上推荐路径上的包。随着越来越多的人开始编写可以在节点和浏览器中运行的CommonJS包,它可能变得不可避免。此外,我们计划围绕软件包构建curl.js的编译到javascript功能。
希望我能帮到你。 :)