我正在使用Visual Studio 2013 Update 3,并安装了最新版本的WebEssentials。在我的项目设置下,在Typescript Build选项卡下,我将Module系统类型设置为AMD。我有一个Typescript文件,其中包含以下简单代码:
export class Test {
}
然而,当我尝试构建时,我得到以下构建错误(在我的编辑器中也显示为红色波浪形):除非提供了“--module”标志,否则无法编译外部模块。
我一直在寻找这个问题的答案,但似乎在线的所有内容都适用于1.0版本的Typescript,似乎并不适用于我的需求。有没有人以前见过这种行为,如果有的话,你是怎么解决的?
提前感谢您的帮助! :)
答案 0 :(得分:2)
确保该文件包含在visual studio中<TypeScriptCompile
同时确保您的设置适用于Debug
和Release
。
答案 1 :(得分:2)
所需的模块标志指的是为了编译代码应该使用哪个模块加载器。您可能或可能不知道,有AMD
和commonjs
样式模块。您指定的文件是一个模块,为了在另一个TypeScript文件中引用它,您应该定义模块加载器。这是因为TypeScript编译为JavaScript。
这意味着您有两个模块标志选项:
如果你对他们一无所知,我建议你仔细查看。如果你去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提到了一些潜在的修复和问题:
对我而言,有2条线看起来像这样:
删除第一个似乎解决了它(建立在更新4以及更新2)。
另一个建议是更新看似
的行
到
<Import Project="$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets" Condition="Exists('$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets')" />
但这似乎对我不起作用。
amd
声明在打字稿导入行之前,如下所示: <PropertyGroup>
<TypeScriptModuleKind>amd</TypeScriptModuleKind>
</PropertyGroup>
<Import Project="$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets" condition="Exists('$(VSToolsPath)\TypeScript\Microsoft.TypeScript.targets')" />
我没试过。