10 Шагов По Настройке Создание Приложения React + Typescript + Ant-Design

В какой-то момент моей борьбы с Flow-Type на VSCode я согласился, что мне нужно перейти на TypeScript. Поддержка Flow-Type обеспечивается сторонним плагином и совершенно неудовлетворительна.

Если файл невалидный с точки зрения Flow-Type, то перестают работать переходы внутри кода между файлами, например.

И я не могу заставить себя вернуться в WebStorm после знакомства с VSCode. Microsoft, как обычно, полностью тянет время.

Если вам нравится VSCode, приобретите TypeScript. Если бы кто-то сказал мне год назад, что я снова стану фанатом Microsoft, это было бы трудно себе представить.

Но происходят и более удивительные вещи.

Я в полном восторге от качества китайцев.

набор компонентов React от Ant-Design .

И хотя он написан на TypeScript, для его установки нужно вавилон-плагин-импорт .

Но как нам остаться на Create React App (CRA)? Babel был удален из версии TypeScript (CRA-TS).

Поддерживать собственную версию CRA кажется безумием.

Перспективный Preact-CLI (как замена CRA) не обеспечивает необходимого уровня совместимости с React. Но, играясь с Preact-CLI, я заметил, что preact.config.js очень похож на реагировать-приложение-перемонтировано , который я активно использую для обхода ограничений конфигурации Webpack в CRA. Я сравнил этот факт с идеей перевода CRA-TS из ts-loader в Awesome-typescript-loader, внутри которого можно включить Babel. И вуаля! 0) установить приложение create-реагировать

  
  
  
  
  
  
  
  
  
  
   

$ npm install -g create-react-app

1) создать проект

$ create-react-app cra-ts-antd --scripts-version=react-scripts-ts $ cd cra-ts-antd/

2) добавить пакеты

$ yarn add react-app-rewired react-app-rewire-less awesome-typescript-loader babel-core babel-plugin-import babel-preset-react-app -D

3) добавьте config-overrides.js

module.exports = function override(config, env) { const tsLoader = config.module.rules.find(conf => { return conf.loader && conf.loader.includes('ts-loader') }) tsLoader.loader = require.resolve('awesome-typescript-loader') tsLoader.query = { useBabel: true, } const tsLintLoader = config.module.rules.find(conf => { return conf.loader && conf.loader.includes('tslint-loader') }) tsLintLoader.options = tsLintLoader.options || {} // FIXED Warning: The 'no-use-before-declare' rule requires type infomation. tsLintLoader.options.typeCheck = true const rewireLess = require('react-app-rewire-less') config = rewireLess(config, env) const path = require('path') // For import with absolute path config.resolve.modules = [path.resolve('src')].

concat(config.resolve.modules) return config }

4) изменить package.json; код подключает оболочку, перемонтированную в приложение-реагирование

"scripts": { - "start": "react-scripts-ts start", - "build": "react-scripts-ts build", + "start": "BROWSER=none react-app-rewired start --scripts-version react-scripts-ts", + "build": "react-app-rewired build --scripts-version react-scripts-ts", }

5) изменить tsconfig.json; код, среди прочего, включает настройки абсолютного импорта

{ "compilerOptions": { + "allowSyntheticDefaultImports": true, + "baseUrl": ".

", + "paths": { + "*": ["*", "src/*"] + }, - "jsx": "react", + "jsx": "preserve", }, "exclude": [ + "config-overrides.js", ] }

6) добавить .

babelrc; код назначает необходимый пресет и подключает вавилон-плагин-импорт

{ "presets": ["react-app"], "plugins": [ ["import", { "libraryName": "antd", "style": false }] ] }

7) добавить антд; версия исправлена, т.к.

найдена в следующей версии 2.12.3 ошибка

$ yarn add [email protected]

8) добавьте src/resources/main.less; код переопределяет переменную

@import "~antd/dist/antd.less"; // import official less entry file @primary-color: #1DA57A;

9).

и подключим его к index.tsx; импорт по абсолютному пути из src

+ import 'resources/main.less';

10) изменить App.tsx

import * as React from 'react'; import '.

/App.css'; + import { Button } from 'antd'; const logo = require('.

/logo.svg'); class App extends React.Component<{}, {}> { render() { return ( <div className="App"> <div className="App-header"> <img src={logo} className="App-logo" alt="логотип" /> <h2>Welcome to React</h2> </div> <p className="App-intro"> To get started, edit `src/App.tsx` and save to reload. </p> + <Button type="primary">Test</Button> </div> ); } } export default App;

Исходники на GitHub Теги: #вискас #разработка сайтов #JavaScript #react.js

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.