数か月前にcreate-react-appを使用して反応プロジェクトを開始しました。プロジェクトをJavascriptからTypeScriptに移行するのは興味深いです。
フラグを使用して、TypeScriptで反応アプリを作成する方法があることがわかりました。
--scripts-version=react-scripts-ts
しかし、既存のJSプロジェクトをTSに移行する方法については説明がありませんでした。時間をかけて変換を行えるように、.jsファイルと.tsファイルの両方で作業できるように、段階的に行う必要があります。この移行の経験はありますか?この作業を行うために必要な手順は何ですか?
Create-react-appをjavascriptからTypeScriptに移行するソリューションを見つけました。この方法でejectを必要としません。
create-react-app --scripts-version=react-scripts-ts
を実行して、TypeScriptで一時的な反応プロジェクトを作成します(注-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に追加します。tsconfig.json, tsconfig.test.json tslint.json
package.json
のスクリプトセクションで、react-scripts
インスタンスをreact-scripts-ts
に変更します(start
、build
、test
およびeject
@types/node
、@types/react
、および@types/react-dom
のモジュールをインストールすることにより、Reactのタイピングをインストールします。 package.jsonを使用する場合は、devDependencies
セクションに入れます。index.js
ファイル名をindex.tsx
に変更します"allowSyntheticDefaultImports": true
- 詳細[〜#〜] note [〜#〜]ステップ7は、index.jsファイルの内容によって異なります(依存する場合は、追加の変更が必要になる場合がありますプロジェクトのJSモジュールで)。
これでプロジェクトを実行できます。jsファイルに関するYou may need an appropriate loader to handle this file type
を含むエラーが発生した場合、babelは.tsxファイルから.jsファイルをロードする方法を知らないため、プロジェクトが動作する可能性があります。行う必要があるのは、プロジェクトの構成を変更することです。 eject
を実行せずにそれを行う方法は、 react-app-rewired パッケージを使用しています。このパッケージを使用すると、デフォルトのプロジェクト設定を追加/オーバーライドする外部構成を構成できます。ここでは、これらの種類のファイルをロードするためにbabelを使用します。次に進みましょう:
react-app-rewired
をインストールします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
スクリプトが プロジェクトのreadmeに示すようにreact-app-rewiredを使用するようにします 。例えば。 "test": "react-app-rewired test --scripts-version react-scripts-ts --env=jsdom"
。
これでプロジェクトを開始でき、問題は解決するはずです。プロジェクトによっては、追加の変更が必要になる場合があります(追加のタイプなど)。
それが役に立てば幸い
コメントで提案されているように、tsconfig.jsonファイルで"compilerOptions": { "allowJs": true}
を定義することが可能であるため、react-app-rewiredなしでJSとTSを混在させることができます。これに言及してくれてありがとう!
UPDATE:create-react-appバージョン2.1.0はTypeScriptをサポートしているため、ゼロから始めている人はそれを使用して新しいアプリケーションを作成できますTypeScript、および documentation に従って、次のコマンドで実行する必要があります。
$ 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ファイルに変更できます。
作成React App v2.1.0はTypeScriptサポート付きで今日リリースされました 今日。つまり、react-scripts-ts
フォークをイジェクトしたり使用したりする必要がなくなりました;- 必要なこと 既存のCreate React Appプロジェクトが必要なパッケージをインストールしている場合:
$ npm install --save TypeScript @types/node @types/react @types/react-dom @types/jest
$ # or
$ yarn add TypeScript @types/node @types/react @types/react-dom @types/jest
その後、.js
ファイルの名前を.ts
ファイルに変更するだけで、TypeScriptの使用を開始できます。
(create-react-app-TypeScriptフォークを使用して既存のアプリがある場合、 通常のCreate React App に移植する方法)のチュートリアルがあります。
そのためには、構成をイジェクトする必要があります。
取り出したら、次の手順を実行する必要があります。
tsx
およびts
をwebpack構成(devおよびprod)のextensions
テーブルに追加します。Ts-loaderを追加します。ここに例があります
{
test: /\.(ts|tsx)$/,
include: paths.appSrc,
use: [
{
loader: require.resolve('ts-loader'),
},
],
},
Eslintをtslintに変更
Source-map-loaderを追加して、TypeScriptファイルをデバッグできるようにします。
{
test: /\.js$/,
loader: require.resolve('source-map-loader'),
enforce: 'pre',
include: paths.appSrc,
}
TypeScript構成ファイルを作成し、allowJs
をtrueに設定することを忘れないでください。