Подтвердить что ты не робот

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, это так. Что происходит?

4b9b3361

Ответ 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, где бы он ни находился.