Node.js 如何让Visual Studio Typescript 1.7 intellisense与nodejs库(angular2,rxjs)一起工作?
[已解决] 我记录了一个补丁,这个补丁应该会在下一个VS插件版本中发布。基本上,如果您将模块分辨率指定为“NodeJs”,则可以让intellisense工作。但是编译器不喜欢这样,因为它希望它是“节点”。看起来他们正在做的修复是通过指定“Node”使一切工作正常Node.js 如何让Visual Studio Typescript 1.7 intellisense与nodejs库(angular2,rxjs)一起工作?,node.js,typescript,visual-studio-2015,angular,intellisense,Node.js,Typescript,Visual Studio 2015,Angular,Intellisense,[已解决] 我记录了一个补丁,这个补丁应该会在下一个VS插件版本中发布。基本上,如果您将模块分辨率指定为“NodeJs”,则可以让intellisense工作。但是编译器不喜欢这样,因为它希望它是“节点”。看起来他们正在做的修复是通过指定“Node”使一切工作正常 我正在尝试使用msbuild构建Angular2项目,因为我想使用ASP.NETWebAPI作为后端。代码编译和运行良好,但我的编辑器(SublimiteText 3或Visual Studio 2015)不喜欢我导入Angular
我正在尝试使用msbuild构建Angular2项目,因为我想使用ASP.NETWebAPI作为后端。代码编译和运行良好,但我的编辑器(SublimiteText 3或Visual Studio 2015)不喜欢我导入Angular2库的方式: boot.ts:
import {bootstrap} from 'angular2/platform/browser'; // error: cannot find module
import {AppComponent} from './app.component';
bootstrap(AppComponent, []);
如果我使用TypeScript编译器直接使用tsconfig.json和node lite服务器运行相同的示例(),那么SublimiteText3可以正常工作,并且可以识别这种语法。然而,一旦我切换到msbuild,出于某种原因,我就会出现这个intellisense错误。以下是我的项目中我认为相关的其他部分:
文件夹结构:
\
- index.html
- package.json
\app
- boot.ts
- app.component.ts
\node_modules
\angular2
\platform
- browser.js
- browser.d.ts
package.json:
{
"name": "angular2-webapi",
"version": "1.0.0",
"scripts": {
},
"license": "ISC",
"dependencies": {
"angular2": "2.0.0-beta.0",
"systemjs": "0.19.6",
"es6-promise": "^3.0.2",
"es6-shim": "^0.33.3",
"reflect-metadata": "0.1.2",
"rxjs": "5.0.0-beta.0",
"zone.js": "0.5.10"
},
"devDependencies": {
"typescript": "^1.7.3"
}
}
csproj文件中的TypeScript编译器部分(大部分是从tsconfig文件复制的,但其中一些是由VS自动设置的):
实际上,我不确定系统应该如何知道如何解析“angular2/platform/browser”语法,但如果不使用msbuild,它似乎可以工作。考虑到这段代码能够正确编译和运行,它似乎也应该在我的编辑器中工作。有人有什么想法吗?只要项目属性组设置为
<TypeScriptModuleResolution>NodeJs</TypeScriptModuleResolution>
NodeJs
有一种解决方法是修改Microsoft.Typescript.targets。
它使编译器能够工作:
<TypeScriptBuildConfigurations Condition="'$(TypeScriptModuleResolution)' != ''">$(TypeScriptBuildConfigurations) --moduleResolution $(TypeScriptModuleResolution)</TypeScriptBuildConfigurations>
$(TypeScriptBuildConfiguration)--moduleResolution$(TypeScriptModuleResolution)
硬编码为
<TypeScriptBuildConfigurations Condition="'$(TypeScriptModuleResolution)' != '' and '$(TypeScriptModuleResolution)' != 'NodeJs'">$(TypeScriptBuildConfigurations) --moduleResolution $(TypeScriptModuleResolution)</TypeScriptBuildConfigurations>
<TypeScriptBuildConfigurations Condition="'$(TypeScriptModuleResolution)' == 'NodeJs'">$(TypeScriptBuildConfigurations) --moduleResolution node</TypeScriptBuildConfigurations>
$(TypeScriptBuildConfiguration)--moduleResolution$(TypeScriptModuleResolution)
$(TypeScriptBuildConfiguration)--模块解决方案节点
PS确保备份Microsoft.Typescript.targets正如@AndrewSorokin所描述的,这似乎是Typescript工具中的一个错误,但是您可以覆盖项目文件中的错误代码,而不是编辑
Microsoft.Typescript.targets
。将以下行添加到项目文件的末尾:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- ... -->
<!-- Set the Module Resolution mode to be NodeJs as required by intellisense -->
<!-- See http://stackoverflow.com/questions/34939261/how-can-i-get-visual-studio-typescript-1-7-intellisense-to-work-with-nodejs-libr -->
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<TypeScriptModuleResolution>NodeJs</TypeScriptModuleResolution>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<TypeScriptModuleResolution>NodeJs</TypeScriptModuleResolution>
</PropertyGroup>
<!-- ... -->
<!-- Override the moduleResolution parameter to tsc to overcome a bug in intellisense -->
<!-- See http://stackoverflow.com/questions/34939261/how-can-i-get-visual-studio-typescript-1-7-intellisense-to-work-with-nodejs-libr -->
<PropertyGroup>
<CompileTypeScriptDependsOn>
SpoofTypeScriptModuleResolution;
$(CompileTypeScriptDependsOn)
</CompileTypeScriptDependsOn>
</PropertyGroup>
<Target Name="SpoofTypeScriptModuleResolution">
<PropertyGroup>
<TypeScriptBuildConfigurations>$(TypeScriptBuildConfigurations.Replace('--moduleResolution NodeJs', '--moduleResolution node'))</TypeScriptBuildConfigurations>
</PropertyGroup>
<Message Text="Options: $(TypeScriptBuildConfigurations)" />
</Target>
</Project>
NodeJs
NodeJs
SpoofTypeScriptModuleResolution;
$(CompileTypeScriptDependsOn)
$(TypeScriptBuildConfigurations.Replace('--moduleResolution节点','--moduleResolution节点'))
Webstorm EAP是开箱即用的,它是免费的,因为它是预发布版本->谢谢。我实际上只使用VisualStudio,因为我希望能够在本地调试我的ASP.NETWebAPI项目。我还想指出,这似乎是特定于生成的,而不是特定于编辑器的,因为我在SublimiteText中遇到了这个问题,如果我不使用msbuild,它通常会工作。我已经更新了问题以反映这些信息。谢谢安德鲁。看起来这可能是一个短期解决方案,但我不认为我会使用它,因为它需要修改一个全局目标文件。因为我要将此发布到托管服务,所以我将无法访问该文件。现在,我可能只需要将Sublime与Tconfig文件一起使用,然后等待VS的TS插件的更新。不过,我感谢您的帮助。
<TypeScriptBuildConfigurations Condition="'$(TypeScriptModuleResolution)' != '' and '$(TypeScriptModuleResolution)' != 'NodeJs'">$(TypeScriptBuildConfigurations) --moduleResolution $(TypeScriptModuleResolution)</TypeScriptBuildConfigurations>
<TypeScriptBuildConfigurations Condition="'$(TypeScriptModuleResolution)' == 'NodeJs'">$(TypeScriptBuildConfigurations) --moduleResolution node</TypeScriptBuildConfigurations>
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- ... -->
<!-- Set the Module Resolution mode to be NodeJs as required by intellisense -->
<!-- See http://stackoverflow.com/questions/34939261/how-can-i-get-visual-studio-typescript-1-7-intellisense-to-work-with-nodejs-libr -->
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<TypeScriptModuleResolution>NodeJs</TypeScriptModuleResolution>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<TypeScriptModuleResolution>NodeJs</TypeScriptModuleResolution>
</PropertyGroup>
<!-- ... -->
<!-- Override the moduleResolution parameter to tsc to overcome a bug in intellisense -->
<!-- See http://stackoverflow.com/questions/34939261/how-can-i-get-visual-studio-typescript-1-7-intellisense-to-work-with-nodejs-libr -->
<PropertyGroup>
<CompileTypeScriptDependsOn>
SpoofTypeScriptModuleResolution;
$(CompileTypeScriptDependsOn)
</CompileTypeScriptDependsOn>
</PropertyGroup>
<Target Name="SpoofTypeScriptModuleResolution">
<PropertyGroup>
<TypeScriptBuildConfigurations>$(TypeScriptBuildConfigurations.Replace('--moduleResolution NodeJs', '--moduleResolution node'))</TypeScriptBuildConfigurations>
</PropertyGroup>
<Message Text="Options: $(TypeScriptBuildConfigurations)" />
</Target>
</Project>