Giter Site home page Giter Site logo

news-api-migration-walkthrough's Introduction

MIGRATION NEWS-API TO TS TASK WALKTHROUGH

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

ПОДГОТОВКА

  • Открываем в VSCode папку с приватным репозиторием RSSchool
  • Создаем новую ветку с именем таски (migration-newip-to-ts)
  • Переходим в созданную ветку
  • Создаем новую папку с именем таски
  • Копируем в нее файлы таски (загружаем zip-файл с гитхаба и распаковываем)
  • (Делаем init коммит)

НАСТРОЙКА СБОРКИ И ДОБАВЛЕНИЕ API KEY

  • Выполняем npm i для установки исходных пакетов проекта
  • Добавляем apiKey (получить можно на сайте https://newsapi.org)
    • В файл src/components/controller/appLoader.js
  • (Делаем коммит)
  • Добавляем пакет TS
    • npm i -D typescript
  • Добавляем пакеты для работы ESlint и Webpack c .ts файлами
    • npm i -D @typescript-eslint/parser (парсер TS для ESlint - чтобы ESlint умел правильно парсить .ts файлы)
    • npm i -D @typescript-eslint/eslint-plugin (плагин TS для ESlint - правила, по которым ESlint будет проверять .ts файлы)
    • npm i -D ts-loader (лоадер TS для webpack-а - чтобы webpack мог работать с .ts файлами)
    • npm i -D eslint-webpack-plugin (плагин ESlint - для работы ESlint вместе с Webpack)
  • Настраиваем конфиги
    • TS
      • Создаем файл tsconfig.json (команда npx tsc --init)
      • Внутри файла tsconfig.json
        • Выключить "module": "commonjs" (т.к. сборкой будет заниматься Webpack)
        • Включить "strict": true (требование таски)
        • Включить "noImplicitAny": true (требование таски)
    • ESlint
      • В корень добавляем
        • "parser": "@typescript-eslint/parser" (чтобы ESlint понимал какой парсер использовать)
      • В массив "plugins" добавляем
        • "@typescript-eslint" (чтобы ESlint видел плагин TS)
      • В массив "extends" добавляем
        • "eslint:recommended" (родные правила ESlint - на всякий случай)
        • "plugin:@typescript-eslint/recommended" (правила Typescript)
      • В массив "rules" добавляем
        • "@typescript-eslint/no-explicit-any": 2 (правило, запрещающее использование типа any)
    • Webpack
      • Меняем "entry" удаляя из него расширение файла .js (чтобы при замене .js на .ts он его тоже подхватил)
      • Добавляем в массив "module.rules" правило для .ts-файлов (чтобы Wepback обрабатывал .ts-файлы)
        • { test: /\.ts$/i, use: 'ts-loader' },
      • Импортируем плагин ESlint (чтобы он работал во время работы Webpack)
        • const EslingPlugin = require('eslint-webpack-plugin');
      • Добавляем экземпляр плагина ESlint в массив "plugins" (в его настройках указываем тип файлов .ts)
        • new EslingPlugin({ extensions: 'ts' })
      • Добавляем в массив "resolve.extensions" расширение .ts-файлов (это определяет порядок поиска файлов в импортах)
        • extensions: ['.ts', '.js']
  • (Делаем коммит)
  • Запускаем дев-сервер командой npm start

ОПИСЫВАЕМ ИНТЕРФЕЙСЫ

  • Пишем интерфейсы для News API:
    • Создаем файл src/types/index.ts
    • Внутри файла объявляем и импортируем интерфейсы News API (export interface <имя интерфейса> { ... })
      • Какие именно поля должны иметь интерфейсы и их типы можно посмотреть в документации News API (https://newsapi.org/docs/endpoints/sources)
  • (Делаем коммит)

МИГРАЦИЯ ПРОЕКТА

  • По очереди меняем расширения файлов с .js на .ts в следующем порядке и добиваемся отсутствия ошибок в консоли (для каждого готового .ts файла делаем коммит):
    • src/components/view/news/news.js
    • src/components/view/sources/sources.js
    • src/components/view/appView.js
    • src/components/controller/loader.js
    • src/components/controller/appLoader.js
    • src/components/controller/controller.js
    • src/components/app/app.js
    • src/index.js

ДОПОЛНИТЕЛЬНЫЕ ЗАДАЧИ

  • Добавляем в футер лого со ссылкой на курс и ссылку на гитхаб автора
  • (Делаем коммит)
  • Добавляем "фичу" (например, фильтрацию по алфавиту или еще что-то)
  • (Делаем коммит)
  • Убираем из html темплейта явное подключение скрипта (если до этого не сделали)
  • (Делаем коммит)
  • Реализуем адаптив и наводим красоту (правим HTML и CSS)
  • (Делаем коммит)
  • Фиксим отсутствующий img/news_placeholder.jpg (файл src/components/view/news/news.ts)
  • (Делаем коммит)
  • Меняем URL в fetch на тот, который заработает в gh-pages (https://nodenews.herokuapp.com/)
  • (Последний* коммит)
  • Билдим проект командой npm run build
  • Копируем билд в ветку gh-pages
  • (Делаем коммит в gh-pages и пушим в удаленный репозиторий)
  • Оформляем пул-реквест

Mission Complete!

news-api-migration-walkthrough's People

Contributors

jeneko avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.