Что вам не хватает - это разделение проблем, несмотря на первоначальное преимущество таких шаблонов стартера, они начинают вызывать случайные зависимости и усложнять ментальную модель. Гораздо проще иметь свой интерфейс в отдельном проекте.
Независимо: версия
Visual Studio по машинописи.
Всегда используйте самые последние доступные. Это управляет версией TypeScript, которая поддерживает среду IDE. Вероятно, вы закончите компиляцию в отдельном процессе или в браузере во время разработки. Опять же, вы захотите использовать последнее, но скорее всего оно будет установлено с другим менеджером пакетов.
Тестирование в стиле браузера (обычно ручной рабочий процесс TDD) или node.js тестирование (автоматическое). Это должно быть выбрано вверх, чтобы предотвратить больше репликация дерева эскимов.
Во-первых, я определенно согласен с важностью выбора фронта, но, если это еще возможно, просто неприятно, чтобы добавить тесты к существующему проекту.
Рабочие процессы TDD связаны с автоматическим тестированием, поскольку они полагаются на быструю обратную связь. Это ортогонально, выполняете ли вы свои тесты в браузере или используете NodeJS.
Вы должны использовать тот подход, который наиболее подходит для вашего приложения, и это может быть сочетание обоих.
Поскольку вы пишете внешнее приложение JavaScript, вы, вероятно, захотите запустить несколько тестов в браузере. Однако, как заявил дядя Боб (Robert C. Martin), взгляды должны быть немыми и нуждаться в небольшом тестировании. Моя интерпретация этого заключается в том, что мы не должны тратить слишком много времени на тестирование таких вещей, как «Угловые» или «Реактивы» ,, чтобы обеспечить их правильную визуализацию и вместо этого сосредоточиться на тестировании поведенческих элементов системы, таких как службы и простые старые функции.
Таким образом, вы можете захотеть запустить тесты своих клиентских служб против фактического времени выполнения браузера, а не только Node.js, и это разумно.
Существует множество библиотек для тестирования, которые помогут вам в этом. У меня нет конкретной рекомендации, кроме того, чтобы сказать, что вы должны найти надежного тестового бегуна и простую библиотеку утверждений. Пробные и истинные библиотеки тестирования, такие как QUnit и Tape, являются примерами надежных опций.
Последнее примечание: важно не путать концепцию тестирования интеграции с прогонными тестами в веб-браузере, это совершенно верно для запуска тестов стиля TDD, что подразумевает модульные тесты в веб-браузере.
NPM @ типы/имя-библиотеки: предполагается заполнить папку node_modules с и библиотекой имени и библиотеки-name.d.ts, но требует package.json содержать ссылку для обоих @ типы/имя библиотеки и имя библиотеки для работы в моем проекте VS 2015 ENT v3 и asp.net 4 mvc 5.
Проще говоря, это идет назад, чтобы отсоединить ваш передний конец от вашего заднего конца. Visual Studio и, конечно же, ASP.NET не имеют ничего общего с версиями пакетов типов.
Если пакет поставляется со своими объявлениями типа, тогда вам не нужно устанавливать пакет вспомогательных типов, иначе вы это сделаете.
В любом случае установите зависимости JavaScript и TypeScript с помощью JavaScript-менеджера пакетов (таких как NPM, JSPM или пряжа).
Не используйте для этого NuGet!
Как вы полагаете, есть проблемы с версированием, в настоящее время это сложная проблема в TypeScript. Однако в очередной раз это не имеет никакого отношения к ASP.NET или Visual Studio.
Какая версия ECMAScript: ES6, по-видимому слишком далеко вперед. es2015 , скорее всего, но это, по-видимому, имеет (возможно) отношения к нескольким другим вопросам.
ES6 - это то же самое, что и ES2015, причем последним является имя, под которым в конечном итоге было выпущено первое. ECMAScript теперь следует за ежегодной каденцией, примерно, с ES2017 не за горами.
Приятная вещь о наличии транспилятора, такого как TypeScript, заключается в том, что вы можете использовать последние функции из es2017 и по-прежнему нацеливать es5 на emit, и все будет в порядке.
Модульная система: CommonJS для NodeJS и автоматизированного тестирования и тестирования разработки VS автоматизирован только на стороне сервера, и VS UI тесты являются ручной процесс. Поэтому AMD/UMD требуют, чтобы JS, вероятно, была опцией для VS, но она добавляет свой собственный рабочий процесс и обслуживание и соображения. Использование ссылок с тройной косой чертой (надежный) может работать, но после того, как вы установили свои библиотеки в узловые модули, вы должны использовать полный путь к узловым модулям в файле slug в файле импорта . (решение всего этого элемента может быть «ключевым» для общего вопроса ).
Это очень сложный вопрос и, вероятно, единственный из ваших вопросов, который вам действительно нужно потратить много времени. Как я сказал ранее, используя NodeJS или нет, он ортогонален автоматическому тестированию. Но если вы нацеливаете NodeJS изначально на свой тестовый код, вам нужно будет использовать выход CommonJS.
Для фактического кода приложения выбор не имеет ничего общего с тем, используете ли вы Visual Studio или нет, я сожалею о повторении этого, но действительно важно, чтобы вы отделили эти идеи.
Вопрос о том, какой формат модуля использовать для кода вашего внешнего интерфейса, является очень важным и спорным.
утроить /// ссылки не формат модуля, а скорее способ объявления зависимостей между глобальными переменными, которые объявлены и ссылки на несколько файлов.
Они плохо масштабируются, работая приемлемо, когда у вас есть только несколько файлов.
Тройной /// ссылки не должны использоваться. Они не являются модульным механизмом, и их использование полностью отличается от использования любых форматов модулей/модулей, которые вы упомянули, включая CommonJS.
Не объединять их с модульной системой, что вам нужно было бы сделать, чтобы запускать тесты под NodeJS или загружать приложение с помощью RequireJS или чего-то еще.
RequireJS - отличный вариант, который подразумевал бы модули AMD, как вы говорите. RequireJS не требует использования ссылок с тройной косой чертой. На самом деле их следует избегать как чуму при использовании этого формата или любого другого формата модуля!
Я настоятельно рекомендую использовать модули UMD. Изоморфный JavaScript является проблематичной идеей, и он не предлагает вам никаких преимуществ, так как вы создаете приложение-браузер с бэкэндом .NET.
Многие разработчики фактически do используют модули CommonJS в браузере. Это требует непрерывного связывания с такими инструментами, как Webpack. Этот подход имеет свои преимущества и недостатки. Основными преимуществами являются способность опереться на существующие серверные инструменты NodeJS JavaScript, такие как npm, с помощью Webpack или Browserify. Это может показаться не большим преимуществом, но количество богатого инструментария, доступного для модулей CommonJS, не издевается, что делает его сильным вариантом.
Рассмотрите возможность использования формата модуля System и загрузчика SystemJS через jspm как для управления пакетами, так и для загрузки кода. Используя этот подход, вы получаете преимущества RequireJS, можете запускать свои тесты под NodeJS и браузером с помощью jspm run, не требуя переключения целевых форматов или связывания кода, чтобы проверить его. Также нет необходимости связывать ваш код во время разработки, хотя это поддерживается. Что еще более важно, вы получаете преимущество в написании будущего совместимого кода, поскольку он предлагает единственный формат модуля и загрузчик, который правильно моделирует семантику, которую в конечном итоге будут использовать модули ES, когда они реализованы изначально в браузерах. JSPM имеет поддержку первого класса для TypeScript, Babel и Traceur. Для потомков здесь есть описание формата модули системы, взятый из приведенной выше ссылки:
System.register можно рассматривать как новый формат модуль, предназначенный для поддержки точной семантики модулей ES6 в ES5. Это формат, который был разработан из совместной работы и поддерживается как выход модуля в Traceur (как экземпляр), Babel и TypeScript (как система). В этом формате поддерживается все динамические привязки и циклические эталонные поведения, поддерживаемые модулями ES6. Таким образом, он действует как безопасный и всеобъемлющий целевой формат для полиполя в ES6-модули.
Отказ от ответственности: Я являюсь членом организации JSPM GitHub, играет определенную роль в поддержании реестра и внес очень незначительные взносы в JSPM кли.
Обратите внимание, что ответ @ aluan-haddad является отличным подспорьем в машинописном тексте и дереве решений для рассмотрения этих проблем. Однако, основываясь на его ответе, я отредактировал свой вопрос, чтобы уточнить, что я ищу только для n-грязного руководства из траншей на полное решение для машинописного текста для ASP.NET 4 MVC 5, включая блок/поведение на основе браузера тестирование кода машинописного текста. –
Хотя я понимаю, что вы уточнили свой вопрос, я просто скажу, что вы никогда не найдете решение для тестирования TypeScript, которое не является _also_ решением для тестирования JavaScript. –
Aluan, пожалуйста, помните, что я сказал это: «Но я ищу эмпирический ответ: какая комбинация доказала свою эффективность для производственной команды». Я считаю, что все, с чем я столкнулся, - это проблема конфигурации. Все проблемы с конфигурацией связаны с неправильным пониманием цели конкретных конфигураций или отсутствием объяснения общей цели комбинаций конфигурации. –