【问题标题】:Use __dirname into class compiled in Typescript AMD在 Typescript AMD 中编译的类中使用 __dirname
【发布时间】:2014-02-01 21:54:12
【问题描述】:

我正在寻找在 AMD 编译的 TypeScript 类中使用 __dirname(或等效项)的解决方案,__dirname 在那里不存在。而且因为它是打字稿,我不能(或者我不知道如何)导入包含urimodule,这样我就可以获取uri。

我曾经找到过解决方案,但我不记得是如何找到的,目前我也找不到了。

我看了一下这个,但它是纯 javascript 并且我使用 typescript,我尝试导入模块,但出现 TS 错误。

https://stackoverflow.com/questions/9027429/how-to-use-nodejs-global-module-objects-in-requirejs-modules

【问题讨论】:

  • 通常,我希望它位于某种定义文件中。但是,您可以添加:declare var __dirname: string;
  • 但是如果我这样做的话 __dirname 将会是空的。我需要访问当前目录的路径
  • 在运行时不会为空。它只是作为编译器的占位符。
  • 好吧,我想你不明白,但实际上我并没有说出来。我使用 requireJs,它删除了 __dirname、__filename nodejs 全局变量,它们在 requirejs 模块中不可用。

标签: requirejs typescript amd dirname


【解决方案1】:

一种解决方案是:

在 app.js 中,创建一个全局变量:

__basePath = __dirname;

然后,在 AMD 脚本中,使用 __basepath + 'relativePathFromBasePath' 加载文件。

我知道我找到了另一种解决方案,但我不记得如何了。

【讨论】:

    【解决方案2】:

    我不使用 TypeScript,但是根据我看到的 TypeScript 代码和我对 RequireJS 的了解,我相信你应该可以像这样访问module.uri

    import module = require("module");
    console.log(module.uri);
    

    名称modulespecial。您也可以使用require.toUrl(<module name>)(即URL 中的Url,而上面的变量是uri 中的URI),但对于此任务,它似乎不如module.uri 有用。一方面,您必须在调用中包含模块的名称。

    module.uri 可能包含..,因此需要清理。我知道您的代码在服务器端运行,因此在 Node.js 中我们会调用 path.dirname(path.normalize(module.uri))

    【讨论】:

    • 我试过了,但我的 IDE 找不到“模块”库,并且出现 IDE 错误,并且 .ts 不再编译为 .js。 ://
    • 你能访问require.toUrl吗?我不太喜欢它,因为您必须传递模块的名称,但它会起作用。
    • 是的,我可以访问require,因为它是使用 requirejs 自动导入的!
    • 我问你是否可以访问require.toUrl,而不仅仅是require。据我了解,TypeScript 可以让您访问require,但是toUrl 函数对 TypeScript 代码不可见。
    • 我目前正在处理另一个问题,由于这个问题,我现在不使用 AMD,直到我找到解决方案,所以我现在无法真正测试它,但我'当我找到解决方案时会更新此线程。问题:stackoverflow.com/questions/21506083/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-06
    • 2017-11-01
    • 2018-06-01
    • 1970-01-01
    相关资源
    最近更新 更多