Как я могу создать TypeScript как проект, отдельный от проекта MVC и зависящий от него, и скопировать сгенерированный JavaScript в проект MVC?

Фабриковать

У меня есть проект MVC, в котором есть классы С#, которые в конечном итоге сериализуются и используются через ajax и т. д. Я использую TypeLite для создания определений этих классов C# (альтернативы TypeLite обсуждаются здесь), поэтому я могу получить время компиляции, проверяющее код, который использует эти сериализованные классы C# json. Таким образом, если определение C# изменится, а мой код TypeScript не изменится, я получу ошибку времени компиляции, потому что оно напрямую связано с определением C#.

Исходная проблема

В настоящее время мой TypeScript существует в том же проекте, что и мои классы C#. Итак, у меня очень странная проблема с циклической зависимостью. Чтобы решить эту проблему, я должен следовать очень конкретному шаблону

  1. Обновите класс C#
  2. Скомпилируйте проект MVC
  3. Запустите TypeLite, сгенерировав определения
  4. Обновите TypeScript или обнаружите ошибку компиляции при следующей сборке.

Мне это не нравится, потому что я не могу автоматически запускать TypeLite как часть процесса сборки. Я не могу этого сделать, поскольку TypeLite требует, чтобы сборка C# из проекта MVC была сначала собрана, чтобы запустить и получить доступ к определениям. Кроме того, я должен включать сгенерированные определения в репозиторий кода, что мне не нравится делать, поскольку сгенерированный код и кто-то может забыть его сгенерировать и зафиксировать/зафиксировать.

Предложенное решение

Я могу легко разорвать эту циклическую зависимость, если у меня есть проект TypeScript, который зависит от моего проекта MVC. Таким образом, я могу включить TypeLite в сборку, удалив его из проекта MVC и поместив в проект TypeScript.

Этот подход кажется мне очень правильным, поскольку проект TypeScript — это отдельный скомпилированный проект, который зависит от сборки, которая создается перед собственным проектом.

Актуальная проблема/вопрос

К сожалению, я не знаю, как создать проект TypeScript за пределами моего проекта MVC, который создает, а затем копирует сгенерированный JavaScript обратно в проект MVC (для развертывания через веб-развертывание и/или развертывание веб-ролей Azure). Итак, как мне получить проект TypeScript, отдельный от моего проекта MVC, который строится ПОСЛЕ проекта MVC, а затем копирует сгенерированный код JavaScript обратно в проект MVC для развертывания?


person Allen Rice    schedule 09.04.2014    source источник


Ответы (3)


Итак, как мне получить проект TypeScript, отдельный от моего проекта MVC, который строится ПОСЛЕ проекта MVC, а затем копирует сгенерированный JavaScript обратно в проект MVC для развертывания?

Вы можете включить все файлы TS/JS в папке в .csproj и т. д., используя следующую инструкцию:

<Content Include="src\**\*.*">
</Content>

А затем управляйте их внешней компиляцией, используя что-то вроде grunt-ts : https://github.com/grunt-ts/grunt-ts

Дополнительное преимущество: ваши товарищи по команде могут использовать любой редактор для TS и не привязываться к VS. Помогает вашим дизайнерам тоже.

person basarat    schedule 10.04.2014
comment
Басарат, так приятно тебя слышать! Мне нужно наткнуться на ваши видео на ютубе. Я совершенно забыл об использовании grunt! Поскольку каждый разработчик здесь использует VS, а мы используем TFS для сборки, я бы хотел что-то, что интегрируется в MSBuild. Итак, я рассмотрю интеграцию grunt-ts в сборки msbuild. Есть ли какой-нибудь файл *.*proj, который может работать с grunt / grunt-ts? До сих пор я экспериментировал с потрошением csproj и установкой необходимых целей, чтобы заставить его создать файл .js. На данный момент это мои любимые два отрывка. - person Allen Rice; 10.04.2014
comment
Нашел хорошую статью про grunt-ts и visual studio! joeriks.com/2013/08/06/ Благодаря этому я могу просто включить TypeScript в свой проект MVC и собрать их с помощью grunt с задачей после сборки. Это решит проблему копирования файлов. Пока я не включу файл .targets в csproj, он не будет пытаться собрать TypeScript (оставив его для grunt-ts) - person Allen Rice; 10.04.2014

Я использовал typelite в течение короткого времени, и вот что я сделал:

  1. Сослался на dll typelite на место, где написаны мои сущности (я предполагаю, что у вас есть dll, где размещены все ваши сущности).

  2. Перешел к моему WWW-проекту (который в моем случае имеет ссылку на dll-объекты) и создал файл tt, который создает файлы ts. Файл tt импортирует dll и выполняет свои функции.

Когда я компилирую свой веб-сайт WWW, проект сущностей компилируется, а файлы .ts регенерируются. Файлы .ts расположены именно там, где я хотел, и все в порядке.

person Amir Popovich    schedule 10.04.2014

Мы использовали очень простой подход, когда компилятор TypeScript не мог обрабатывать большое количество исходных файлов: Создайте проект машинописного текста в подкаталоге вашего проекта MVC: Итак, если ваша структура MVC выглядит так:

\Content
\Controllers
\Scripts

Создайте проект TypeScript в

\Content\tscode\TypeScriptProject.sln.

Затем в вашем машинописном проекте вы можете ссылаться на файлы, которые находятся ниже корня проекта:

/// <reference path="../../../Scripts/typings/jasmine/jasmine.d.ts"/>

После этого вы сможете настроить определение сборки для сборки MVC до TypeScript.
Надеюсь, это поможет.

person blorkfish    schedule 10.04.2014
comment
это очень интересный подход - person Allen Rice; 10.04.2014