Ответ 1
Я нашел решение для переноса create-реагировать-приложения из JavaScript в машинописный текст, этот способ не требует извлечения.
- Создайте проект временного реагирования с использованием машинописного текста, выполнив команду
create-react-app --scripts-version=react-scripts-ts
(Примечание. Требуется глобальная установкаcreate-react-app
) - В вашем собственном проекте - под файлом
package.json
удалитеreact-scripts
- Добавьте к вашему проекту
react-scripts-ts
, выполнив командуyarn add react-scripts-ts
или, если вы используете npm, тогдаnpm install react-scripts-ts
. Или добавьте"react-scripts-ts": "2.8.0"
в package.json. - Из проекта, который вы создали на шаге 1, скопируйте файлы:
tsconfig.json, tsconfig.test.json tslint.json
в ваш собственный проект - В рамках собственного проекта, в
package.json
, при сценарии раздела, измененияreact-scripts
экземпляровreact-scripts-ts
(должно быть подstart
,build
,test
иeject
- Установите наборы для реакции, установив следующие модули, используя пряжу или npm:
@types/node
,@types/react
и@types/react-dom
. Поместите в разделdevDependencies
если используете package.json. - Измените
index.js
файлаindex.tsx
наindex.tsx
- В вашем файле tsconfig.json добавьте следующую конфигурацию:
"allowSyntheticDefaultImports": true
- для получения дополнительной информации
ПРИМЕЧАНИЕ. Шаг 7 может потребовать дополнительной модификации в зависимости от того, что у вас есть в файле index.js (если это зависит от модулей JS в проекте).
Теперь вы можете запустить свой проект, и он может работать, для тех из вас, кто получает сообщение об ошибке. You may need an appropriate loader to handle this file type
отношении файлов .js, это происходит потому, что babel не знает, как загрузить .js. файл из .tsx файлов. Что нам нужно сделать, это изменить конфигурацию проекта. Я обнаружил, что делать это без запуска eject
- это использование пакета response-app-rewired. Этот пакет позволяет вам настроить внешнюю конфигурацию, в которую будут добавлены/переопределены параметры проекта по умолчанию. Мы будем использовать babel для загрузки файлов такого типа. Пусть перешел на:
- Установите пакет
react-app-rewired
используя пряжу или npm - В вашей корневой папке (где находится
package.json
) создайте новый файл с именемconfig-overrides.js
-
Поместите этот код в файл
config-overrides
:var paths = require('react-scripts-ts/config/paths') module.exports = function override(config) { config.module.rules.push({ test: /\.(js|jsx)$/, include: paths.appSrc, loader: require.resolve('babel-loader'), options: { babelrc: false, presets: [require.resolve('babel-preset-react-app')], cacheDirectory: true, }, }) return config }
Отредактируйте файл package.json, чтобы в сценариях start/start-js
, build
, test
и eject
использовался response-app-rewired, как показано в файле readme проекта. Например, "test": "react-app-rewired test --scripts-version react-scripts-ts --env=jsdom"
.
Теперь вы можете начать проект, и проблема должна быть решена. Вам могут потребоваться дополнительные модификации в зависимости от вашего проекта (дополнительные типы и т.д.).
Надеюсь, поможет
Как предложено здесь в комментариях, можно определить: "compilerOptions": { "allowJs": true}
в вашем файле tsconfig.json, так что вы можете смешивать JS и TS без перереагирования по app-app. Спасибо за упоминание этого!
ОБНОВЛЕНИЕ: создание-реакция-приложение версии 2.1.0 поддерживает машинописный текст, поэтому для тех из вас, кто начинает с нуля, вы можете использовать его для создания нового приложения с машинописным шрифтом, и в соответствии с документацией это должно быть сделано с помощью следующей команды:
$ npx create-react-app my-app --typescript
Для существующих проектов после обновления до версии 2.1.0 добавьте следующие пакеты в зависимости вашего проекта с помощью следующей команды:
$ npm install --save typescript @types/node @types/react @types/react-dom @types/jest
и тогда вы можете просто переименовать .js в .ts файлы.