Visual Studio 2013 Typescript компилятор не соблюдает файл _references.ts
Я новичок в Typescript и последние несколько дней работал в Visual Studio 2013 Update 2 (который изначально включает в себя всю поддержку).
У меня есть следующие параметры, выбранные в Visual Studio на странице свойств моего проекта.
Это означает, что при сохранении файла он автоматически скомпилирует все файлы Typescript и создаст один файл RRStore.js
. Затем я просто включаю это, используя BundleManager в ASP.NET, как если бы это был какой-то старый JS файл. Я не использую загрузчики модулей, так как там не много JS-кода.
![enter image description here]()
Чтобы разрешить зависимости в правильном порядке, TS-компилятор нуждается в файле _references.ts
, поэтому я создал его следующим образом:
/// <reference path="RR.ErrorHandling.ts" />
/// <reference path="RR.JQueryPlugins.ts" />
/// <reference path="RR.Util.ts" />
/// <reference path="viewmodel/UserViewModel.ts" />
/// <reference path="viewmodel/AddressViewModel.ts" />
/// <reference path="viewmodel/ProductViewModel.ts" />
/// <reference path="viewmodel/CartItemViewModel.ts" />
/// <reference path="viewmodel/CheckoutViewModel.ts" />
/// <reference path="viewmodel/StoreWizardViewModel.ts" />
/// <reference path="viewmodel/DefenderWizardViewModel.ts" />
/// <reference path="viewmodel/MainViewModel.ts" />
/// <reference path="RR.YoutubeLoader.ts" />
Этот файл означает, что когда я ударил Ctrl+S
в Visual Studio после редактирования файла TS, он объединит все мои другие файлы TS вместе в этом порядке, чтобы такие вещи, как прототипы, были верны для наследования.
Это было нормально работать при Ctrl+S
при сохранении файла TS.
Затем мне пришлось внести изменения в некоторый код С#, после чего, конечно, мне нужно было нажать Ctrl+F5
для создания проекта. К моему удивлению, в браузере появились странные ошибки JS - о прототипах, не существующих на объектах.
Я просмотрел сгенерированный Typescript файл RRStore.js
в браузере и просмотрел порядок всех моих файлов, и он поместил файл RR.YoutubeLoader.ts
FIRST.
Это странно! (не в последнюю очередь потому, что он LAST в моем списке ссылок выше.)
Я пошел в этот файл и нажал Ctrl+S
, обновил RRStore.js
и все вернулось в правильном порядке.
Другими словами, когда я делаю полную сборку, порядок файлов в _references.ts
не соблюдается, но когда я просто нажимаю Ctrl+S
, это так. Что происходит?
Ответы
Ответ 1
Изменить: Обновить: Оказывается, _references.ts
должен быть в корне вашего проекта, который будет распознан компилятором. Так что предпочтительный способ:-) Этот метод работает тоже... но, пожалуйста, не делайте этого:
Исходное обходное решение:
При чтении через сгенерированный файл RRStore.js
я заметил, что порядок, казалось, был в явно случайном порядке: RR.YoutubeLoader
, ProductViewModel
, DefenderViewModel
, StoreViewModel
и т.д.
Я понял, что может быть только одно объяснение....
Я открыл файл .csproj
и достаточно уверен, что компилятор обрабатывал файлы в том порядке, в котором они были первоначально добавлены в мой проект!!!.
Итак, я перенес файл _references.ts
до первого в файле MySite.csproj
, и теперь он правильно распознает его и компилирует все в правильном порядке.
Я не уверен, что это известная ошибка, но это было подходящее решение для меня.
MyProject.csproj
![enter image description here]()
Ответ 2
Sooooo....
По-видимому _references.ts
должен находиться в корне проекта.
Я не тестировал это, но это ответ от https://typescript.codeplex.com/workitem/2592
Я по-прежнему предпочитаю мой способ вручную редактировать файл csproj (так что все файлы ts все inside Scripts/Typescript
). Надеемся, что когда-нибудь они изменят это неинтуитивное поведение и будут искать _references.ts, где бы он ни находился.
Ответ 3
Я не мог найти ссылки на это в typescript отладчике ошибок, поэтому я создал его в https://typescript.codeplex.com/workitem/2592