網站搜尋

Visual Studio 2015、TypeScript 與 Angular2 以及 tsconfig.json


我一直在嘗試使用 Angular2 的最新版本(2.0.0-alpha.44)以及 Visual Studio 2015。以下是我使用的與此問題相關的所有版本:

  • Visual Studio 2015
  • Asp.NET 5
  • Typescript 1.6
  • Resharper 10
  • Angular 2.0.0-alpha.44

這是我的解決方案:

我所有的 TypeScript 都在 /Ts 目錄中,該目錄中也有一個 tsconfig.json 文件。這會讓 Visual Studio 顯示一個「typescript 虛擬專案」

當我將 import {Component, bootstrap} from "angular2/angular2"; 這行放入我的 main.ts 時,它會在我的 node_modules 目錄中找到 angular2 的庫文件並顯示出來(不過我不太確定扁平化目錄結構是什麼意思)

在這個階段,TypeScript 編譯器將會編譯那個單一檔案(main.ts)。然而,它不再編譯該資料夾中的其他 .ts 檔案(在引入 Angular2 之前它是會編譯的),而且它也沒有將輸出放到我在 tsconfig.json 中指定的 outFile 位置

Resharper 指出在尋找 Component 和 bootstrap 參考時出現問題,但提示工具似乎也理解這些的簽名。不確定這兩者如何同時成立。

如果我從方程中移除 angular2,typescript 就會按照我的 tsconfig.json 中的所有設定運行,將所有 .ts 文件編譯成 app.js,並放到 ../wwwroot/js/app.js

有人成功讓 VS2015、TypeScript 和 Angular2 和諧共存嗎?

答案#1

來自 TypeScript 手冊:

在 TypeScript 中,就像在 ECMAScript 2015 中一樣,任何包含頂層 import 或 export 的文件都被視為模組。

和

正如 JS 文件與模組之間存在一對一對應關係一樣,TypeScript 的模組源文件與其生成的 JS 文件之間也存在一對一對應關係。這其中的一個結果是,無法使用 --outFile 編譯器選項將多個模組源文件合併成單一的 JavaScript 文件。

我相信這就是當你“從方程中移除 angular2”時會有輸出的原因。模組與 outFile 不相容。請改用 outDir。

另外,我曾試圖將 tsconfig 文件放在子資料夾中,但 Visual Studio 並沒有遵循,所以我又把它移回專案根目錄。

答案#2

我已經嘗試了幾個星期。看起來 d.ts 檔案仍然不正確。如果你注意到,定義檔案仍然是 alpha 38 或 39。

即使定義檔案不在 alpha 38 或 39 上,或者不是從正確的版本建立的,我仍然認為你無法讓它運作,因為它無論如何都沒有被固定下來,而且我相信它仍然缺少很多東西。

你遇到的錯誤我還沒有見過,而且我也不使用 resharper(儘管我認為這不太可能真正導致你的問題)。我可以說的是,我在 alpha 26 上取得了成功,可以在這裡找到:

https://github.com/microsoft/ngconf2015demo

它可能對你幫助不大,因為它只是如此早期的測試版本。

此外,在較新的測試版本中,他們已經開始創建 UpdateAdapter,範例如此處可見:

http://blog.thoughtram.io/angular/2015/10/24/upgrading-apps-to-angular-2-using-ngupgrade.html

這是一個非常重要的組件,因為每個想要提前採用的人都會希望在 angular2 中使用 angular1 指令。

我也無法讓這個運作(即使這是一個全新的 alpha 版本)。定義檔仍然只有 39,並且它們之間存在一些差異。即使我將他整個專案原樣導入,也會有許多缺失的引用和導出。對此沒什麼太多可做的,除了自己嘗試修改 d.ts 檔案來解決編譯錯誤。

我認為,模組系統也應該設置為 AMD。這將幫助你更接近解決編譯時錯誤。此外,在 Visual Studio 中,我認為你需要將標準設置為 ES5,以便當前運行 Angular2(但我不確定,這只是我用來運行 alpha 26 範例的步驟)。

我每天在工作上仍然努力嘗試,所以如果我能讓它運行(我覺得如果不深入研究 Angular2 的程式碼並學習它,我可能做不到,但我可能會在接下來幾週嘗試),我會編輯這個回覆並告訴你。與此同時,繼續努力看看你能否讓它運作,然後告訴我!

在我看來,任何行業領袖都需要盡快採用 Angular2,因為使用 Angular2 的好處無法用言語充分表達。不幸的是,由於許多在任何應用中絕對必要的指令仍然使用 Angular 1.4,因此在 Angular2 從商業角度有用之前,UpgradeAdapter(ngUpgrade)需要可用。

編輯:

實際上,目前看起來定義文件現在位於 angular2 源碼中,而不是 tsd。嘗試從 angular2 源碼中獲取 .d.ts 文件,然後嘗試編譯 TypeScript 文件。