2017-11-27 4 views
2

私は数ヶ月前にcreate-react-appを使って反応プロジェクトを開始しました。私はJavascriptからTypescriptにプロジェクトを移行するのに面白いです。javascriptからtypescriptへのcreate-react-appの移行

私はフラグを使用してtypescriptですとアプリを反応させる作成する方法があることを見た:

--scripts-version=react-scripts-ts 

しかし、私はTSに既存のJSプロジェクトを移行することができますどのように任意の説明を見つけることができませんでした。 私は両方の.jsファイルと.tsファイルで作業できるように、段階的に行う必要があるため、時間の経過とともに変換を行うことができます。 誰もこの移行に関する経験はありますか?この仕事をするために必要なステップは何ですか?

答えて

8

、このようイジェクトを必要としません。

  1. 一時的に(注意 - グローバルにインストールすることがcreate-react-appが必要です)コマンドにcreate-react-app --scripts-version=react-scripts-ts を実行することにより、typescriptですとプロジェクトを反応作成し、独自のプロジェクトで
  2. からpackage.jsonファイルの下react-scripts
  3. あなたに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
  4. package.jsonで、スクリプトのセクションの下で、react-scripts-tsreact-scriptsインスタンスを変更する(startの下でなければなりません、buildtestと:手順1コピーでファイルを作成したプロジェクトから
  5. eject
  6. ヤーンまたはNPM使用して、以下のモジュールをインストールすることにより、反応のためのタイピングを取り付けます。@types/node@types/react@types/react-domをpackage.jsonを使用する場合devDependenciesセクションに置きます。
  7. ファイル名をindex.tsx
  8. に変更します。index.tsxで非相対インポートを修正しました。例えば。 import Reactimport * as Reactに変更してください。詳細情報here。追加の修正が必要な場合があります

NOTEステップ7は、(それがプロジェクトにJSモジュールに依存している場合)、あなたのindex.jsファイルに持っているものに依存します。

これでプロジェクトを実行することができます。エラーが発生している.jsファイルに関してはYou may need an appropriate loader to handle this file typeが含まれています.babelは.tsxファイルから.jsファイルをロードする方法がわからないために発生します。私たちがする必要があるのは、プロジェクトの構成を変更することです。私はそれを実行しないで見つけた方法ejectreact-app-rewiredパッケージを使用しています。このパッケージを使用すると、デフォルトのプロジェクト設定を追加/上書きする外部設定を構成できます。ここでは、これらのタイプのファイルを読み込むためにbabelを使用します。のは、上に移動してみましょう:

  1. ルートフォルダで糸を使用してパッケージreact-app-rewiredまたはNPM
  2. をインストールします(package.jsonが置かれている場所)の名前でconfig-overrides.js
  3. を新しいファイルを作成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-jsbuildtest、およびejectスクリプトは、project readmeに示すようにreact-app-rewiredを使用します。例えば。 "test": "react-app-rewired test --scripts-version react-scripts-ts --env=jsdom"

これでプロジェクトを始めることができ、問題を解決する必要があります。あなたのプロジェクト(追加のタイプなど)に応じて追加の変更が必要な場合があります。

はそれが答えを

+0

セクション1のコマンドは、 'create-react-app --scripts-version = react-scripts-ts'(現在の回答には 's'がありません)と書かれているはずです。しかし、明らかに6文字以上の文字を変更する必要があり、干渉したくないのです。 – Pend

+1

8.では、allowSyntheticDefaultImports:trueをtsconfig.jsonに追加することができます –

2

これを行うには、設定を取り出す必要があります。

吐出後、次の手順を実行する必要があります。

  1. はWebPACKのののconfigs(DEV及びPROD)にextensionsテーブル にtypescriptです拡張tsxtsを追加します。
  2. ts-loaderを追加します。ここでは活字ファイルをデバッグする可能性を得るために、ソース・マップ・ローダーを追加

  3. をtslintする例

    { 
        test: /\.(ts|tsx)$/, 
        include: paths.appSrc, 
        use: [ 
        { 
         loader: require.resolve('ts-loader'), 
        }, 
        ], 
    }, 
    
  4. 変更eslintです。

    { 
        test: /\.js$/, 
        loader: require.resolve('source-map-loader'), 
        enforce: 'pre', 
        include: paths.appSrc, 
    } 
    
  5. 活字体のconfigファイルを作成し、真の にallowJsを設定することを忘れないでください。私は活字するJavaScriptから作成反応するアプリを移行するためのソリューションを見つけ

+0

感謝を役に立てば幸い、私はわからないが、私は、私は私のプロジェクトでのWebPACKの設定を持っていないため、現在のWebPACKは、反応し、スクリプトによって管理されていることと思います。私がイジェクトするとウェブパックの設定ファイルを持っていますか? – galvan

+1

はい、そのために取り出しを実行する必要があります。あなたが待つことができれば。次のBabelバージョンは、そのままの状態でTypescriptをサポートし、おそらくイジェクトすることなく移行することが可能になります。残念ながら、Babel v7のリリース日はありません(しかし、ベータ版が利用可能です – niba

+0

私は既存のコードベースで作業していましたが、私はこのアプローチを使っていましたが、設定ファイルとコードの他の領域私がこれを解決したのは、_-- scripts-version = react-script-ts_フラグを使って新しいアプリケーションを作成してから、ファイルを比較することでした –

関連する問題