From 83cd52fb9f1542e4621702d55cc0ae72b0c49195 Mon Sep 17 00:00:00 2001 From: Nick McCurdy Date: Mon, 2 Jul 2018 19:41:59 -0400 Subject: [PATCH 01/10] Remove TSLint --- packages/react-scripts/config/paths.js | 10 ++++------ packages/react-scripts/config/webpack.config.dev.js | 3 +-- packages/react-scripts/config/webpack.config.prod.js | 3 +-- packages/react-scripts/package.json | 3 --- .../template/src/registerServiceWorker.ts | 1 - packages/react-scripts/template/tslint.json | 10 ---------- 6 files changed, 6 insertions(+), 24 deletions(-) delete mode 100644 packages/react-scripts/template/tslint.json diff --git a/packages/react-scripts/config/paths.js b/packages/react-scripts/config/paths.js index cc6891d6a..186eab7a7 100644 --- a/packages/react-scripts/config/paths.js +++ b/packages/react-scripts/config/paths.js @@ -41,8 +41,8 @@ const getPublicUrl = appPackageJson => // like /todos/42/static/js/bundle.7289d.js. We have to know the root. function getServedPath(appPackageJson) { const publicUrl = getPublicUrl(appPackageJson); - const servedUrl = envPublicUrl || - (publicUrl ? url.parse(publicUrl).pathname : '/'); + const servedUrl = + envPublicUrl || (publicUrl ? url.parse(publicUrl).pathname : '/'); return ensureSlash(servedUrl, true); } @@ -60,7 +60,6 @@ module.exports = { appNodeModules: resolveApp('node_modules'), appTsConfig: resolveApp('tsconfig.json'), appTsProdConfig: resolveApp('tsconfig.prod.json'), - appTsLint: resolveApp('tslint.json'), publicUrl: getPublicUrl(resolveApp('package.json')), servedPath: getServedPath(resolveApp('package.json')), }; @@ -84,7 +83,6 @@ module.exports = { appTsConfig: resolveApp('tsconfig.json'), appTsProdConfig: resolveApp('tsconfig.prod.json'), appTsTestConfig: resolveApp('tsconfig.test.json'), - appTsLint: resolveApp('tslint.json'), publicUrl: getPublicUrl(resolveApp('package.json')), servedPath: getServedPath(resolveApp('package.json')), // These properties only exist before ejecting: @@ -94,7 +92,8 @@ module.exports = { const ownPackageJson = require('../package.json'); const reactScriptsPath = resolveApp(`node_modules/${ownPackageJson.name}`); -const reactScriptsLinked = fs.existsSync(reactScriptsPath) && +const reactScriptsLinked = + fs.existsSync(reactScriptsPath) && fs.lstatSync(reactScriptsPath).isSymbolicLink(); // config before publish: we're in ./packages/react-scripts/config/ @@ -116,7 +115,6 @@ if ( appNodeModules: resolveOwn('node_modules'), appTsConfig: resolveOwn('template/tsconfig.json'), appTsProdConfig: resolveOwn('template/tsconfig.prod.json'), - appTsLint: resolveOwn('template/tslint.json'), appTsTestConfig: resolveOwn('template/tsconfig.test.json'), publicUrl: getPublicUrl(resolveOwn('package.json')), servedPath: getServedPath(resolveOwn('package.json')), diff --git a/packages/react-scripts/config/webpack.config.dev.js b/packages/react-scripts/config/webpack.config.dev.js index 924e3e4f0..32586f1f1 100644 --- a/packages/react-scripts/config/webpack.config.dev.js +++ b/packages/react-scripts/config/webpack.config.dev.js @@ -275,12 +275,11 @@ module.exports = { // https://github.com/jmblog/how-to-optimize-momentjs-with-webpack // You can remove this if you don't use Moment.js: new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), - // Perform type checking and linting in a separate process to speed up compilation + // Perform type checking in a separate process to speed up compilation new ForkTsCheckerWebpackPlugin({ async: false, watch: paths.appSrc, tsconfig: paths.appTsConfig, - tslint: paths.appTsLint, }), ], // Some libraries import Node modules but don't use them in the browser. diff --git a/packages/react-scripts/config/webpack.config.prod.js b/packages/react-scripts/config/webpack.config.prod.js index 7cb33afd0..2f5cffe96 100644 --- a/packages/react-scripts/config/webpack.config.prod.js +++ b/packages/react-scripts/config/webpack.config.prod.js @@ -379,11 +379,10 @@ module.exports = { // https://github.com/jmblog/how-to-optimize-momentjs-with-webpack // You can remove this if you don't use Moment.js: new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), - // Perform type checking and linting in a separate process to speed up compilation + // Perform type checking in a separate process to speed up compilation new ForkTsCheckerWebpackPlugin({ async: false, tsconfig: paths.appTsProdConfig, - tslint: paths.appTsLint, }), ], // Some libraries import Node modules but don't use them in the browser. diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 95bf68c2a..85f67b259 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -49,9 +49,6 @@ "ts-jest": "22.0.1", "ts-loader": "^2.3.7", "tsconfig-paths-webpack-plugin": "^2.0.0", - "tslint": "^5.7.0", - "tslint-config-prettier": "^1.10.0", - "tslint-react": "^3.2.0", "uglifyjs-webpack-plugin": "^1.1.8", "url-loader": "0.6.2", "webpack": "3.8.1", diff --git a/packages/react-scripts/template/src/registerServiceWorker.ts b/packages/react-scripts/template/src/registerServiceWorker.ts index 28c89f7b6..5d7b98109 100644 --- a/packages/react-scripts/template/src/registerServiceWorker.ts +++ b/packages/react-scripts/template/src/registerServiceWorker.ts @@ -1,4 +1,3 @@ -// tslint:disable:no-console // In production, we register a service worker to serve assets from local cache. // This lets the app load faster on subsequent visits in production, and gives diff --git a/packages/react-scripts/template/tslint.json b/packages/react-scripts/template/tslint.json deleted file mode 100644 index bfdc862cf..000000000 --- a/packages/react-scripts/template/tslint.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": ["tslint:recommended", "tslint-react", "tslint-config-prettier"], - "linterOptions": { - "exclude": [ - "config/**/*.js", - "node_modules/**/*.ts", - "coverage/lcov-report/*.js" - ] - } -} From 1a02f380540489d0347087f70e7d44668080ce73 Mon Sep 17 00:00:00 2001 From: Nick McCurdy Date: Mon, 2 Jul 2018 19:46:22 -0400 Subject: [PATCH 02/10] Restore ESLint for JS files --- .../config/webpack.config.dev.js | 21 +++++++++++++++- .../config/webpack.config.prod.js | 24 ++++++++++++++++++- packages/react-scripts/package.json | 8 +++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/packages/react-scripts/config/webpack.config.dev.js b/packages/react-scripts/config/webpack.config.dev.js index 32586f1f1..85e152a5e 100644 --- a/packages/react-scripts/config/webpack.config.dev.js +++ b/packages/react-scripts/config/webpack.config.dev.js @@ -15,6 +15,7 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin'); const InterpolateHtmlPlugin = require('react-dev-utils/InterpolateHtmlPlugin'); const WatchMissingNodeModulesPlugin = require('react-dev-utils/WatchMissingNodeModulesPlugin'); +const eslintFormatter = require('react-dev-utils/eslintFormatter'); const ModuleScopePlugin = require('react-dev-utils/ModuleScopePlugin'); const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); const getClientEnvironment = require('./env'); @@ -134,10 +135,28 @@ module.exports = { // We are waiting for https://github.com/facebookincubator/create-react-app/issues/2176. // { parser: { requireEnsure: false } }, + // First, run the linter. + // It's important to do this before Babel processes the JS. { test: /\.(js|jsx|mjs)$/, - loader: require.resolve('source-map-loader'), enforce: 'pre', + use: [ + require.resolve('source-map-loader'), + { + options: { + formatter: eslintFormatter, + eslintPath: require.resolve('eslint'), + // @remove-on-eject-begin + baseConfig: { + extends: [require.resolve('eslint-config-react-app')], + }, + ignore: false, + useEslintrc: false, + // @remove-on-eject-end + }, + loader: require.resolve('eslint-loader'), + }, + ], include: paths.appSrc, }, { diff --git a/packages/react-scripts/config/webpack.config.prod.js b/packages/react-scripts/config/webpack.config.prod.js index 2f5cffe96..dcc8a1e30 100644 --- a/packages/react-scripts/config/webpack.config.prod.js +++ b/packages/react-scripts/config/webpack.config.prod.js @@ -16,6 +16,7 @@ const ExtractTextPlugin = require('extract-text-webpack-plugin'); const ManifestPlugin = require('webpack-manifest-plugin'); const InterpolateHtmlPlugin = require('react-dev-utils/InterpolateHtmlPlugin'); const SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin'); +const eslintFormatter = require('react-dev-utils/eslintFormatter'); const ModuleScopePlugin = require('react-dev-utils/ModuleScopePlugin'); const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin'); const paths = require('./paths'); @@ -140,10 +141,31 @@ module.exports = { // TODO: Disable require.ensure as it's not a standard language feature. // We are waiting for https://github.com/facebookincubator/create-react-app/issues/2176. // { parser: { requireEnsure: false } }, + + // First, run the linter. + // It's important to do this before Babel processes the JS. { test: /\.(js|jsx|mjs)$/, - loader: require.resolve('source-map-loader'), enforce: 'pre', + use: [ + require.resolve('source-map-loader'), + { + options: { + formatter: eslintFormatter, + eslintPath: require.resolve('eslint'), + // @remove-on-eject-begin + // TODO: consider separate config for production, + // e.g. to enable no-console and no-debugger only in production. + baseConfig: { + extends: [require.resolve('eslint-config-react-app')], + }, + ignore: false, + useEslintrc: false, + // @remove-on-eject-end + }, + loader: require.resolve('eslint-loader'), + }, + ], include: paths.appSrc, }, { diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 85f67b259..0b53d70b5 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -22,6 +22,7 @@ }, "dependencies": { "autoprefixer": "7.1.6", + "babel-eslint": "7.2.3", "babel-jest": "^22.1.0", "babel-loader": "^7.1.2", "babel-preset-react-app": "^3.1.1", @@ -30,6 +31,13 @@ "css-loader": "0.28.7", "dotenv": "4.0.0", "dotenv-expand": "4.2.0", + "eslint": "4.10.0", + "eslint-config-react-app": "^2.1.0", + "eslint-loader": "1.9.0", + "eslint-plugin-flowtype": "2.39.1", + "eslint-plugin-import": "2.8.0", + "eslint-plugin-jsx-a11y": "5.1.1", + "eslint-plugin-react": "7.4.0", "extract-text-webpack-plugin": "3.0.2", "file-loader": "0.11.2", "fork-ts-checker-webpack-plugin": "^0.2.8", From 5dded55f323735bbcc7bb877509de40f559f1f27 Mon Sep 17 00:00:00 2001 From: Nick McCurdy Date: Mon, 2 Jul 2018 20:29:35 -0400 Subject: [PATCH 03/10] Enable ESLint on TS files with TypeScript ESLint Parser --- packages/react-scripts/config/webpack.config.dev.js | 3 ++- packages/react-scripts/config/webpack.config.prod.js | 3 ++- packages/react-scripts/package.json | 5 +++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/react-scripts/config/webpack.config.dev.js b/packages/react-scripts/config/webpack.config.dev.js index 85e152a5e..1352c576d 100644 --- a/packages/react-scripts/config/webpack.config.dev.js +++ b/packages/react-scripts/config/webpack.config.dev.js @@ -138,7 +138,7 @@ module.exports = { // First, run the linter. // It's important to do this before Babel processes the JS. { - test: /\.(js|jsx|mjs)$/, + test: /\.(js|jsx|mjs|ts|tsx)$/, enforce: 'pre', use: [ require.resolve('source-map-loader'), @@ -149,6 +149,7 @@ module.exports = { // @remove-on-eject-begin baseConfig: { extends: [require.resolve('eslint-config-react-app')], + parser: 'typescript-eslint-parser', }, ignore: false, useEslintrc: false, diff --git a/packages/react-scripts/config/webpack.config.prod.js b/packages/react-scripts/config/webpack.config.prod.js index dcc8a1e30..1666ff813 100644 --- a/packages/react-scripts/config/webpack.config.prod.js +++ b/packages/react-scripts/config/webpack.config.prod.js @@ -145,7 +145,7 @@ module.exports = { // First, run the linter. // It's important to do this before Babel processes the JS. { - test: /\.(js|jsx|mjs)$/, + test: /\.(js|jsx|mjs|ts|tsx)$/, enforce: 'pre', use: [ require.resolve('source-map-loader'), @@ -158,6 +158,7 @@ module.exports = { // e.g. to enable no-console and no-debugger only in production. baseConfig: { extends: [require.resolve('eslint-config-react-app')], + parser: 'typescript-eslint-parser', }, ignore: false, useEslintrc: false, diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 0b53d70b5..c59b1e468 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -49,9 +49,9 @@ "postcss-loader": "2.0.8", "promise": "8.0.1", "raf": "3.4.0", - "source-map-loader": "^0.2.1", "react-dev-utils": "^5.0.1", "resolve": "1.6.0", + "source-map-loader": "^0.2.1", "style-loader": "0.19.0", "sw-precache-webpack-plugin": "0.11.4", "ts-jest": "22.0.1", @@ -67,7 +67,8 @@ "devDependencies": { "react": "^15.5.4", "react-dom": "^15.5.4", - "typescript": "^2.7.1" + "typescript": "^2.7.1", + "typescript-eslint-parser": "^16.0.1" }, "peerDependencies": { "typescript": "2.x" From 194a482d06f755883b8528d316b92232f29a1cea Mon Sep 17 00:00:00 2001 From: Nick McCurdy Date: Tue, 3 Jul 2018 03:25:43 -0400 Subject: [PATCH 04/10] Move typescript-eslint-parser to dependencies --- packages/react-scripts/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index c59b1e468..3b7c61521 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -57,6 +57,7 @@ "ts-jest": "22.0.1", "ts-loader": "^2.3.7", "tsconfig-paths-webpack-plugin": "^2.0.0", + "typescript-eslint-parser": "^16.0.1", "uglifyjs-webpack-plugin": "^1.1.8", "url-loader": "0.6.2", "webpack": "3.8.1", @@ -67,8 +68,7 @@ "devDependencies": { "react": "^15.5.4", "react-dom": "^15.5.4", - "typescript": "^2.7.1", - "typescript-eslint-parser": "^16.0.1" + "typescript": "^2.7.1" }, "peerDependencies": { "typescript": "2.x" From e72746f5e222d6430460b9e2e5102ae57fc04316 Mon Sep 17 00:00:00 2001 From: Nick McCurdy Date: Tue, 3 Jul 2018 05:01:11 -0400 Subject: [PATCH 05/10] Preserve ESLint config when ejecting --- packages/react-scripts/config/webpack.config.dev.js | 2 +- packages/react-scripts/config/webpack.config.prod.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-scripts/config/webpack.config.dev.js b/packages/react-scripts/config/webpack.config.dev.js index 1352c576d..37dd410cf 100644 --- a/packages/react-scripts/config/webpack.config.dev.js +++ b/packages/react-scripts/config/webpack.config.dev.js @@ -146,11 +146,11 @@ module.exports = { options: { formatter: eslintFormatter, eslintPath: require.resolve('eslint'), - // @remove-on-eject-begin baseConfig: { extends: [require.resolve('eslint-config-react-app')], parser: 'typescript-eslint-parser', }, + // @remove-on-eject-begin ignore: false, useEslintrc: false, // @remove-on-eject-end diff --git a/packages/react-scripts/config/webpack.config.prod.js b/packages/react-scripts/config/webpack.config.prod.js index 1666ff813..106701c38 100644 --- a/packages/react-scripts/config/webpack.config.prod.js +++ b/packages/react-scripts/config/webpack.config.prod.js @@ -153,13 +153,13 @@ module.exports = { options: { formatter: eslintFormatter, eslintPath: require.resolve('eslint'), - // @remove-on-eject-begin // TODO: consider separate config for production, // e.g. to enable no-console and no-debugger only in production. baseConfig: { extends: [require.resolve('eslint-config-react-app')], parser: 'typescript-eslint-parser', }, + // @remove-on-eject-begin ignore: false, useEslintrc: false, // @remove-on-eject-end From b6acada57c064022a7f4813f491539c4960e584f Mon Sep 17 00:00:00 2001 From: Nick McCurdy Date: Wed, 25 Jul 2018 16:34:06 -0400 Subject: [PATCH 06/10] Disable some ESLint rules that are broken in TS files --- packages/react-scripts/config/webpack.config.dev.js | 12 ++++++++++++ packages/react-scripts/config/webpack.config.prod.js | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/packages/react-scripts/config/webpack.config.dev.js b/packages/react-scripts/config/webpack.config.dev.js index 37dd410cf..19e2d70b9 100644 --- a/packages/react-scripts/config/webpack.config.dev.js +++ b/packages/react-scripts/config/webpack.config.dev.js @@ -149,6 +149,18 @@ module.exports = { baseConfig: { extends: [require.resolve('eslint-config-react-app')], parser: 'typescript-eslint-parser', + overrides: [ + { + files: ['*.ts', '*.tsx'], + rules: { + 'no-array-constructor': 'off', + 'no-multi-str': 'off', + 'no-restricted-globals': 'off', + 'no-undef': 'off', + 'no-unused-vars': 'off', + }, + }, + ], }, // @remove-on-eject-begin ignore: false, diff --git a/packages/react-scripts/config/webpack.config.prod.js b/packages/react-scripts/config/webpack.config.prod.js index 106701c38..57f138c95 100644 --- a/packages/react-scripts/config/webpack.config.prod.js +++ b/packages/react-scripts/config/webpack.config.prod.js @@ -158,6 +158,18 @@ module.exports = { baseConfig: { extends: [require.resolve('eslint-config-react-app')], parser: 'typescript-eslint-parser', + overrides: [ + { + files: ['*.ts', '*.tsx'], + rules: { + 'no-array-constructor': 'off', + 'no-multi-str': 'off', + 'no-restricted-globals': 'off', + 'no-undef': 'off', + 'no-unused-vars': 'off', + }, + }, + ], }, // @remove-on-eject-begin ignore: false, From bb115971ee388a28e9e19e85beaabafdb5c87a5a Mon Sep 17 00:00:00 2001 From: Nick McCurdy Date: Sun, 2 Sep 2018 15:50:04 -0400 Subject: [PATCH 07/10] Update typescript-eslint-parser for TS 3 support --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 85669df75..3a2fd7114 100644 --- a/package.json +++ b/package.json @@ -49,15 +49,15 @@ "postcss-loader": "2.0.8", "promise": "8.0.1", "raf": "3.4.0", - "source-map-loader": "^0.2.1", "react-dev-utils": "^5.0.2", "resolve": "1.6.0", + "source-map-loader": "^0.2.1", "style-loader": "0.19.0", "sw-precache-webpack-plugin": "0.11.4", "ts-jest": "22.0.1", "ts-loader": "^2.3.7", "tsconfig-paths-webpack-plugin": "^2.0.0", - "typescript-eslint-parser": "^16.0.1", + "typescript-eslint-parser": "^18.0.0", "uglifyjs-webpack-plugin": "1.2.5", "url-loader": "0.6.2", "webpack": "3.8.1", From 6ef879f4023356f0cb14d436eb68d1a3a9185ac3 Mon Sep 17 00:00:00 2001 From: Nick McCurdy Date: Sun, 2 Sep 2018 16:17:33 -0400 Subject: [PATCH 08/10] Install missing tslib for importHelpers --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 3a2fd7114..973a39c42 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,7 @@ "ts-jest": "22.0.1", "ts-loader": "^2.3.7", "tsconfig-paths-webpack-plugin": "^2.0.0", + "tslib": "^1.9.3", "typescript-eslint-parser": "^18.0.0", "uglifyjs-webpack-plugin": "1.2.5", "url-loader": "0.6.2", From 4507ab88f148078800edc146afc2d33208284a59 Mon Sep 17 00:00:00 2001 From: Nick McCurdy Date: Mon, 3 Sep 2018 15:43:28 -0400 Subject: [PATCH 09/10] Use external eslint-config-react-app-ts package --- config/webpack.config.dev.js | 15 +-------------- config/webpack.config.prod.js | 15 +-------------- eslintrc | 2 +- package.json | 1 + 4 files changed, 4 insertions(+), 29 deletions(-) diff --git a/config/webpack.config.dev.js b/config/webpack.config.dev.js index 19e2d70b9..8608febce 100644 --- a/config/webpack.config.dev.js +++ b/config/webpack.config.dev.js @@ -147,20 +147,7 @@ module.exports = { formatter: eslintFormatter, eslintPath: require.resolve('eslint'), baseConfig: { - extends: [require.resolve('eslint-config-react-app')], - parser: 'typescript-eslint-parser', - overrides: [ - { - files: ['*.ts', '*.tsx'], - rules: { - 'no-array-constructor': 'off', - 'no-multi-str': 'off', - 'no-restricted-globals': 'off', - 'no-undef': 'off', - 'no-unused-vars': 'off', - }, - }, - ], + extends: [require.resolve('eslint-config-react-app-ts')], }, // @remove-on-eject-begin ignore: false, diff --git a/config/webpack.config.prod.js b/config/webpack.config.prod.js index f1e3f9896..e9ccef4ce 100644 --- a/config/webpack.config.prod.js +++ b/config/webpack.config.prod.js @@ -156,20 +156,7 @@ module.exports = { // TODO: consider separate config for production, // e.g. to enable no-console and no-debugger only in production. baseConfig: { - extends: [require.resolve('eslint-config-react-app')], - parser: 'typescript-eslint-parser', - overrides: [ - { - files: ['*.ts', '*.tsx'], - rules: { - 'no-array-constructor': 'off', - 'no-multi-str': 'off', - 'no-restricted-globals': 'off', - 'no-undef': 'off', - 'no-unused-vars': 'off', - }, - }, - ], + extends: [require.resolve('eslint-config-react-app-ts')], }, // @remove-on-eject-begin ignore: false, diff --git a/eslintrc b/eslintrc index 5e603ecd1..263586734 100644 --- a/eslintrc +++ b/eslintrc @@ -1,3 +1,3 @@ { - "extends": "react-app" + "extends": "react-app-ts" } diff --git a/package.json b/package.json index 973a39c42..94ff7d68c 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "dotenv-expand": "4.2.0", "eslint": "4.10.0", "eslint-config-react-app": "^2.1.0", + "eslint-config-react-app-ts": "github:nickmccurdy/eslint-config-react-app-ts", "eslint-loader": "1.9.0", "eslint-plugin-flowtype": "2.39.1", "eslint-plugin-import": "2.8.0", From 2cf077c178ca79389419bb72412587b2cbb15bf2 Mon Sep 17 00:00:00 2001 From: Nick McCurdy Date: Mon, 3 Sep 2018 18:43:30 -0400 Subject: [PATCH 10/10] Install eslint-config-react-app-ts through npm/yarn --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 94ff7d68c..5b38ddc43 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "dotenv-expand": "4.2.0", "eslint": "4.10.0", "eslint-config-react-app": "^2.1.0", - "eslint-config-react-app-ts": "github:nickmccurdy/eslint-config-react-app-ts", + "eslint-config-react-app-ts": "^1.0.1", "eslint-loader": "1.9.0", "eslint-plugin-flowtype": "2.39.1", "eslint-plugin-import": "2.8.0",