我怎样才能得到Visual Studio Typescript 1.7 intellisense与nodejs库(angular2,rxjs)?
[已解决]我logging了一个对TypeScript的错误 ,修复应该汇总到下一个VS插件版本。 本质上,如果您指定模块分辨率为“NodeJs”,则可以使智能感知工作。 但编译器不喜欢这个,因为它期望它是“节点”。 它看起来像他们正在做的修复是通过指定“节点”,使一切工作。
我正在尝试使用msbuild构build一个Angular2项目,因为我想使用ASP.Net Web API作为我的后端。 代码编译和运行良好,但我的编辑器(SublimeText 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-server作为文档运行相同的示例( Angular2 Hero教程 ),那么SublimeText3可以工作,并且可以很好地识别此语法。 但是,一旦我切换到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编译器部分(其中大部分是从Angular2 Hero教程的 tsconfig文件中复制的,但其中的一部分是由VS自动设置的):
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'"> <TypeScriptTarget>ES5</TypeScriptTarget> <TypeScriptJSXEmit>None</TypeScriptJSXEmit> <TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled> <TypeScriptNoImplicitAny>False</TypeScriptNoImplicitAny> <TypeScriptModuleKind>System</TypeScriptModuleKind> <TypeScriptRemoveComments>False</TypeScriptRemoveComments> <TypeScriptGeneratesDeclarations>False</TypeScriptGeneratesDeclarations> <TypeScriptNoEmitOnError>True</TypeScriptNoEmitOnError> <TypeScriptSourceMap>True</TypeScriptSourceMap> <TypeScriptExperimentalDecorators>true</TypeScriptExperimentalDecorators> <TypeScriptModuleResolution>node</TypeScriptModuleResolution> <TypeScriptEmitDecoratorMetadata>true</TypeScriptEmitDecoratorMetadata> </PropertyGroup>
我也尝试改变我参考下面的Angular2库的方式,因为它匹配浏览器脚本的实际物理path,但不幸的是,生成的文件由于某种原因不会将“.js”扩展名添加到生成的依赖项列表。 这意味着浏览器将请求文件“browser”而不是“browser.js”。
这打破了运行时间:
import {bootstrap} from '../node_modules/angular2/platform/browser';
我其实不知道如何系统应该知道如何解决'angular2 /平台/浏览器'的语法,但它似乎工作,如果我不使用msbuild。 鉴于这段代码编译和运行正常,它似乎也应该在我的编辑器中工作。 有人有主意吗?
至于项目属性组设置为
<TypeScriptModuleResolution>NodeJs</TypeScriptModuleResolution>
有一个解决方法是修改Microsoft.Typescript.targets 。 它使编译器工作:
<TypeScriptBuildConfigurations Condition="'$(TypeScriptModuleResolution)' != ''">$(TypeScriptBuildConfigurations) --moduleResolution $(TypeScriptModuleResolution)</TypeScriptBuildConfigurations>
硬编码为
<TypeScriptBuildConfigurations Condition="'$(TypeScriptModuleResolution)' != '' and '$(TypeScriptModuleResolution)' != 'NodeJs'">$(TypeScriptBuildConfigurations) --moduleResolution $(TypeScriptModuleResolution)</TypeScriptBuildConfigurations> <TypeScriptBuildConfigurations Condition="'$(TypeScriptModuleResolution)' == 'NodeJs'">$(TypeScriptBuildConfigurations) --moduleResolution node</TypeScriptBuildConfigurations>
PS确保采取Microsoft.Typescript.targets的备份
这似乎是@AndrewSorokin描述的打字稿工具中的一个错误,但不是编辑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>