g1er / Andrew

0 stars 0 forks source link

Структура проекта Angular #29

Open IgorKulishov opened 6 years ago

IgorKulishov commented 6 years ago

Структура проекта Angular

Смотри видео курс 3: "angular4/videokurs/part1/block1/block1_3.html" Открой файлы проекта после генерации проекта и просмотри файлы и папки.

Основные файлы и папки описаны в видео уроке и перечислены ниже. Содержимое ниже не в полной мере соответствует видео уроку. Я старался уделить больше внимания важным моментам к примеру файлам package.json, .angular-cli.json, tsconfig.json и папке dist. Я буду добавлять содержимое этого задания о чем сообщю.

Файлы:

Файлы расположены в порядке объяснения в видео уроке, тем не менее обрати внимание на важные файлы package.json, .angular-cli.json, tsconfig.json

1. .angular-cli.json

Конфигурационный файл проекта Angular Рассмотрим пока основные свойства конфигурационного проекта (обзорно).

К примеру в нашем случае файл для среды разработки имеет название поля "dev", а для производства "prod" (эти названия полей мы будем указать в команде в терминале при построении приложения, смотри ниже).

Мы так же можем добавить столько файлов окружения сколько нам надо для работы (сколько у нас есть вариантов окружений).

Каждый раз когда мы строим приложения, нам надо указывать в командной строке какой именно файл нам надо использовать (переменные из какого файла нам использовать для построения приложения). К примеру для приложения dev:

ng serve --dev

На самом деле название режима dev является встроенным и поэтому этот режим работает по-умолачнию (без указания флана в командной строке), так что можно просто указать:

ng serve

В обоих случаях (ng serve --dev и ng serve) будет использоваться конфигурационный файл "environments/environment.ts". Как правило этот режим используется для работы на локальном компьютере. Позже мы рассмотрим содержимое конфигурационных файлов "environment.json".

Для запуска prod (production) режима cоответственно, если запустить в режиме:

ng serve --prod

тогда конфигурационные данные будут подгружаться из файла "environments/environment.prod.ts"

Можно добавлять новые режимы для этого их надо добавить в свойство "environments" и указывать при запуске в терминале.

2. .editorconfig

Рассказывается в видео уроке.

3. .gitignore

Перечень файлов и папок, которые мы хотим исключить из коммита в git. Примером могут быть папки node_modules (в которую копируются файлы разработанные другими компаниями и которые используются проектом angular, к примеру модуль bootstrap) и dist (папка в которую копируются откомпелированные файлы JS при процессе компиляции исходных файолов typescript, эта папка как правило указывается в файле tsconfig.json как путь куда надо компелировать файлы).

4. tsconfig.json

Конфигурация typescript нашего проекта. Поскольку angular использует typescript нам надо указать в какую версию JS надо компилировать файлы проекта (JS ES5 или JS ES5). Кроме того указать где находятся исходные файлы typescript и в какую папку копировать конечные откомпилированные файлы проекта javascript.

5. karma.conf.js

Конфигурационный файл для unit test (модульных тестов). Будем отдельно проходить. Для запуска модульных тестов необходимо набрать в терминале команду:

ng test

Модульные тесты пишуться на каждый функциональный блок самими программистами (если следовать современной методологии TDD - test driven development (которой пока мало кому удается придерживаться), то тест должен быть написан до того как пишется сам код ). Мы будем позже изучать как писать модульные тесты (после того как закончим основы Angular). Модульные тесты проверяют работу написанного кода (логики) и пишуться на языке самого кода, к примеру в angular это typescript (javascript). Модульные тесты не проверяют что пользователь видет в браузере (т.е. не проверяют html и css).

6. protractor.conf.json

Конфигурационный файл для e2e (end-to-end) тестов. e2e тесты (в отличии от unit test) проверяют работу от начала до конца работу приложения, т.е. проверяют что пользователь видет в браузере. Программа protractor пробегает по html и проверяет наличие инфрпмации в html внутри тех или иных tags в браузере. Для запуска e2e test необходимо запустить в командной строке:

ng e2e

7. package.json

Один из самых основных конфигурационных файлов любого проекта, который использует приложение по работе с модулями "npm" (не только angular, но и почти всех современных javascript фраймворков), в котором указывается вся информация о нашем проекте и модулях используемых нашим приложением.

package.json это конфигурационный файл используемый npm (node package manager) для скачивания в локальный проект всех модулей с удаленных репозитариев в папку node_modules внутри папки нашего проекта. К модулям используемым нашим приложением относятся к примеру и сам angular ("@angular" modules - как правило названия angular модулей имеют символ "@" перед словом "angular"), css bootstrap.

Рассмотрим что находится внутри package.json:

Выдержки из документации:

version Must match version exactly
>version Must be greater than version
>=version etc
<version
<=version
~version "Approximately equivalent to version" See semver
^version "Compatible with version" See semver
1.2.x 1.2.0, 1.2.1, etc., but not 1.3.0
http://... See 'URLs as Dependencies' below
* Matches any version
"" (just an empty string) Same as *
version1 - version2 Same as >=version1 <=version2.
range1 || range2 Passes if either range1 or range2 are satisfied.
git... See 'Git URLs as Dependencies' below
user/repo See 'GitHub URLs' below
tag A specific version tagged and published as tag See npm-dist-tag
path/path/path See Local Paths below

8. tsconfig.json

9. tslint.json

Папки:

1. node_modules

папка в которую npm копирует все модули указанные в package.json. Файлы внутри используются приложением или служат для работы приложения.

2. dist

Папка в которую копируются:

При запуске нашего angular проекта командой ng serve - приложение angular cli запускает сервер и загружает в браузер файлы именно из папки "dist". Так же когда нам надо разместить наш готовый проект на удаленном сервере мы будем брать файлы из папки "dist" и копировать (deploy process) все файлы на удаленный сервер с которого происходит hosting нашего сайта.

Просмотри содержимое папки созданного проекта. Просмотри видео и прочитай данный урок. Отпиши мне свои вопросы.

g1er commented 6 years ago

В принципе мне все ясно. Твое описание определенно более подробное. Я наверно даже сохраню это твое описание, чтобы пользоваться как шпаргалкой, если забуду что-то или захочу вспомнить про какой-то параметр. Насчет вопросов могу только спросить насчет тестирования. В видео говорят, что тестирования (юнит и е2е) в данном курсе затрагиваться не будет, потому что тема большая. Насколько это вообще актуально? Тестирование проводит сам разработчик или есть отдельная команда тестеров, которые знают процесс тестирования (юнит и е2е)? Т.е. должен ли я уметь проводить тестирование или этот навык будет плюсом, но не обязателен? Почему автор считает, что в курсе изучения ангуляра процесс тестирования не нужен?

IgorKulishov commented 6 years ago

Unit test

IgorKulishov commented 6 years ago

e2e End to end test

Поскольку тестовая программа использует браузер и фактически открывает браузер и загружает тестируемый сайт в браузер, то при тестировании доступен JavaScript и можно обращаться к элементам страницы и проверять содержимое.

Для проверки содержимого полей или даже для осуществления нажатий на кнопки или линки мы можем использовать придуманый нами атрибут data-test и присваивать ему уникальные значения для каждого отельного тестируемого поля или кнопки для использования в качестве селекторов (см. селекторы для атрибутов JS https://learn.javascript.ru/css-selectors).

К примеру:

В самом тесте с исползованием атрибутов обращение к атрибутам будет примерно так [data-test="registration-form"].

Дополнительно: Для кругозора как обращаться к атрибутам в JavaScript описано https://learn.javascript.ru/attributes-and-custom-properties Посмотри в частности как можно читать и менять значение атрибута value:

<body>
  <input id="input" type="text" value="markup">
  <script>
    input.setAttribute('value', 'new'); // поменяли атрибут

    alert( input.value ); // 'new', input.value изменилось!
  </script>
</body>