【问题标题】:Typescript external module打字稿外部模块
【发布时间】:2014-09-28 15:23:36
【问题描述】:

我正在使用 Visual Studio 2013 Update 3,并安装了最新版本的 WebEssentials。在我的项目设置下,在 Typescript Build 选项卡下,我将 Module 系统类型设置为 AMD。我有一个带有以下简单代码的 Typescript 文件:

export class Test {
}

但是,当我尝试构建时,我收到以下构建错误(在我的编辑器中也显示为红色波浪线):除非提供了“--module”标志,否则无法编译外部模块。

我一直在寻找这个问题的答案,但似乎网上的所有内容都是针对 Typescript 1.0 之前的版本,并且似乎不适用于我的需求。以前有没有人看到过这种行为,如果有,您是如何解决的?

提前感谢您的帮助! :)

【问题讨论】:

标签: visual-studio-2013 typescript


【解决方案1】:

确保该文件以<TypeScriptCompile 的形式包含在Visual Studio 中

还要确保您的设置同时适用于 DebugRelease

【讨论】:

  • 感谢您的回复,巴萨拉特!我检查了这两个,它们都很好;我所有的 .ts 文件都被 .csproj 中的 元素包围,并且我已经为调试和发布配置了 AMD。我还多次重新启动 Visual Studio 以尝试完成这项工作,但没有成功。还有其他想法吗?
  • 请参阅下面的回复。这是我的安装。再次感谢!
【解决方案2】:

需要的模块标志是指应该使用什么模块加载器来编译你的代码。您可能知道也可能不知道,有 AMDcommonjsstyle 模块。您指定的文件是一个模块,为了在另一个 TypeScript 文件中引用它,您应该定义模块加载器。这是因为 TypeScript 编译为 JavaScript。

这意味着您有两个模块标志选项:

  • commonjs
  • amd

如果您对它们一无所知,我建议您查找它们。如果你去 TypeScript Playground,http://www.typescriptlang.org/Playground#src=export%20class%20Test%20%7B%0D%0A%7D 你会看到这确实可以编译。 Playground 将amd 作为模块标志进行编译。

因此,您要选择什么取决于您是为浏览器开发还是在 node.js 中开发。

希望有帮助

【讨论】:

  • 明白。但我会认为在我的项目属性中设置 AMD 会做到这一点。不是这样吗?
  • 对不起,我可能误读了您的问题。看来您已经了解 AMD 和 commonjs。尝试从命令行编译,这应该可以工作tsc file.ts --module amd。但是,我从您的 cmets 假设问题与 VS 相关,对此我无能为力
  • 完全没有问题。 :) 请参阅下面的回复。这是我的安装,而不是我在代码或设置中特别做错的任何事情。
【解决方案3】:

basarat 和 froginvasion,感谢你们的帮助。 :) 原来问题出在我的 Visual Studio 安装本身。我发现卸载 Visual Studio 2013 Update 3 并回滚到 Update 2 解决了这个问题。如果我在网上找不到任何关于它的具体信息,我将向 Microsoft 提交一张票以查看它。无论如何,无论我找到什么,我都会在这里发布。我会为你们的努力投票,再次感谢你们!

【讨论】:

  • 既然您自己修复了它,请接受您自己的答案,以便人们知道它已解决;)。
  • 我真的以为我做到了。另一方面,我的浏览器表现得很奇怪。那好吧。我现在已经设置好了。感谢您的提醒! :)
  • 我刚刚更新到 VS Upd 3 & WebEssentials,我收到了同样的信息。我什至找不到关于在 Visual Studio 中设置 --module 的文档。
  • 我还可以确认更新 3 是罪魁祸首。遇到同样的问题,卸载它并重新安装更新2后一切又正常了。杰米,你在任何地方向微软报告过吗?如果是这样,我想投票支持该决议。
  • 我还没有,没有。过去几周我一直非常忙,但本周末应该有时间这样做。我会在此处发布链接,供任何想要查看的人使用。抱歉耽搁了! :)
【解决方案4】:

遇到同样的问题...

我在项目属性中找到了一个 Typescript Build 选项卡。模块系统设置为无。将它切换到 AMD 为我解决了这个问题。

这个选项卡不在屏幕上,我不知道——我认为是更新 2 或 3 中的新选项。--module 消息可能会提到设置的位置。

【讨论】:

    【解决方案5】:

    我最近一直在努力解决这个确切的问题,并且是在应用 Visual Studio 2013 更新 3 之后。

    突然间,我的 AMD 模块无法编译。该模块仍然在项目属性和所有内容中设置。

    在碰壁后,我决定注释掉 csproj 中的 TypeScriptModuleKind 节点。

    <TypeScriptModuleKind>amd</TypeScriptModuleKind>
    

    然后,我重新加载了项目并打开了 typescript build 选项卡。正如预期的那样,模块类型现在设置为none。我将其重新设置为amd。现在,当我重新构建它时,它会成功。

    我再次打开 .csproj 文件,看看它是否添加了 TypeScriptModuleKind 节点,它确实添加了,只是在一个单独的属性组中。

    <PropertyGroup Condition="'$(Configuration)' == 'Debug'">
        <TypeScriptModuleKind>amd</TypeScriptModuleKind>
    </PropertyGroup>
    

    我希望这个非常奇怪的修复程序适用于其他收到 Cannot compile external modules unless the '--module' flag is provided. 错误的人。

    【讨论】:

    • 感谢您的更新!这个周末我会试一试,看看它是如何工作的!我已经开始以不同的方式实施该项目,但将组合一个测试应用程序来使用此解决方案。
    • 我可以确认这对我也有效。尽管出于某种毫无疑问的神奇原因我不得不这样做几次
    【解决方案6】:

    只是为了补充这个答案,有一个 github issue for this 提到了一些潜在的修复和问题:

    1. 对我来说,有 2 行看起来像这样:

    删除第一个似乎可以修复它(基于更新 4 和更新 2)。

    1. 另一个建议是更新一个看起来像这样的行

    <Import Project="$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets" Condition="Exists('$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets')" />
    

    但这似乎对我不起作用。

    1. 另一个建议是确保 amd 声明位于 typescript 导入行之前,如下所示:

    <PropertyGroup> <TypeScriptModuleKind>amd</TypeScriptModuleKind> </PropertyGroup> <Import Project="$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets" condition="Exists('$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets')" />

    我没有尝试过。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多