打字稿外部模块

时间:2014-08-05 20:27:44

标签: visual-studio-2013 typescript

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

export class Test {
}

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

我一直在寻找这个问题的答案,但似乎在线的所有内容都适用于1.0版本的Typescript,似乎并不适用于我的需求。有没有人以前见过这种行为,如果有的话,你是怎么解决的?

提前感谢您的帮助! :)

6 个答案:

答案 0 :(得分:2)

确保该文件包含在visual studio中<TypeScriptCompile

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

答案 1 :(得分:2)

所需的模块标志指的是为了编译代码应该使用哪个模块加载器。您可能或可能不知道,有AMDcommonjs样式模块。您指定的文件是一个模块,为了在另一个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中进行开发。

希望有所帮助

答案 2 :(得分:2)

basarat和froginvasion,感谢你们两位的帮助。 :)事实证明问题出在我的Visual Studio安装本身。我发现卸载Visual Studio 2013 Update 3并回滚到Update 2修复了该问题。如果我在网上找不到任何具体信息,我会向微软提交一张机票,让我看看这张机票。无论如何,无论我发现什么,我都会在这里发布。我会为你的努力投票给你,再次,非常感谢!

答案 3 :(得分:2)

有同样的问题......

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

这个标签不合适,我不知道 - 我认为更新2或3中有新功能。 - 模块消息可能会提到设置的位置。

答案 4 :(得分:1)

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

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

在我的头撞墙后,我决定将csproj中的TypeScriptModuleKind节点注释掉。

<TypeScriptModuleKind>amd</TypeScriptModuleKind>

然后,我重新加载项目并打开typescript构建选项卡。正如所料,模块类型现在设置为none。我将其重新设置为amd。现在,当我重新构建它成功。

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

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

我希望这个非常奇怪的解决方案适用于其他所有人Cannot compile external modules unless the '--module' flag is provided.错误。

答案 5 :(得分:0)

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

  1. 对我而言,有2条线看起来像这样:

  2. 删除第一个似乎解决了它(建立在更新4以及更新2)。

    1. 另一个建议是更新看似

      的行

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

      但这似乎对我不起作用。

      1. 另一个建议是确保amd声明在打字稿导入行之前,如下所示:
      2. <PropertyGroup> <TypeScriptModuleKind>amd</TypeScriptModuleKind> </PropertyGroup> <Import Project="$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets" condition="Exists('$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets')" />

        我没试过。