相对路径和curl.js

时间:2012-08-10 14:44:34

标签: curljs

我有一个这样的项目:

  • LIB /
    • bar.js
    • curl.js
  • 的src /
    • foo.js
  • 测试/
    • 的test.html

在我的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文件中完成所有操作?

1 个答案:

答案 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功能。

希望我能帮到你。 :)