我几个月前使用create-react-app开始了一个反应项目,我很有兴趣将项目从Javascript迁移到Typescript。
我看到有一种方法可以使用标志创建使用typescript的反应应用程序:
--scripts-version=react-scripts-ts
但是我没有找到任何解释如何将现有的JS项目迁移到TS。 我需要它以递增方式完成,这样我就可以使用.js和.ts文件,这样我就可以随着时间的推移进行转换。 有没有人有这种迁移的经验?为使这项工作,应该采取哪些必要步骤?
答案 0 :(得分:50)
我找到了将create-react-app从javascript迁移到打字稿的解决方案,这样不需要弹出。
create-react-app --scripts-version=react-scripts-ts
,使用typescript创建临时反应项目
(注意 - 需要全局安装create-react-app
)package.json
文件下删除react-scripts
react-scripts-ts
或者使用npm然后yarn add react-scripts-ts
将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
,{{ 1}}和test
eject
,@types/node
和@types/react
安装以下模块,以安装反应的类型。如果使用package.json,请输入@types/react-dom
部分。devDependencies
文件名更改为index.js
index.tsx
- for more info 注意第7步可能需要进行额外修改,具体取决于index.js文件中的内容(如果它取决于项目中的JS模块)。
现在你可以运行你的项目并且它可能有用,对于那些收到包含"allowSyntheticDefaultImports": true
关于.js文件的错误的人来说,它发生是因为babel不知道如何加载.js文件来自.tsx文件。我们需要做的是更改项目配置。我在不运行You may need an appropriate loader to handle this file type
的情况下发现这样做的方法是使用react-app-rewired包。此程序包允许您配置将添加/覆盖默认项目设置的外部配置。我们要做的是使用babel加载这些类型的文件。让我们继续前进:
eject
react-app-rewired
所在的位置)创建名为package.json
的新文件将此代码放入config-overrides.js
文件中:
config-overrides
编辑package.json,以便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
}
,start/start-js
,build
和test
脚本使用react-app-rewired,如project readme所示。例如。 eject
。
现在你可以启动你的项目,问题应该解决。根据您的项目(其他类型等),您可能需要进行其他修改。
希望有所帮助
正如评论中所建议的那样,您可以在tsconfig.json文件中定义:"test": "react-app-rewired test --scripts-version react-scripts-ts --env=jsdom"
,这样您就可以在没有react-app-rewired的情况下混合使用JS和TS。谢谢你提到这个!
更新: create-react-app版本2.1.0支持typescript,所以对于那些从头开始的人,你可以使用它来创建带有typescript的新应用程序,并根据{{ 3}}应该使用以下命令完成:
"compilerOptions": { "allowJs": true}
对于现有项目,在更新到2.1.0版之后,使用以下命令将以下包添加到项目的依赖项中:
$ npx create-react-app my-app --typescript
然后你可以简单地将.js重命名为.ts文件。
答案 1 :(得分:5)
立即创建React App v2.1.0 was released today with TypeScript support。这意味着您不再需要弹出或使用react-scripts-ts
分支; all you need to do(如果您已有一个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分支的现有应用,那么这里是how to port it to regular Create React App上的教程。)
答案 2 :(得分:2)
您需要弹出配置才能执行此操作。
弹出后,您需要执行以下步骤:
tsx
和ts
添加到extensions
表格
在webpack configs(dev和prod)。添加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
设置为
真。
答案 3 :(得分:0)
1)。运行
npm install --save typescript @types/node @types/react @types/react-dom @types/jest
或
yarn add typescript @types/node @types/react @types/react-dom @types/jest
2)。将任何文件重命名为TypeScript文件(例如,将src / index.js更改为src / index.tsx)
3)。运行npm i @types/react-dom @types/react-redux @types/react-router-dom
4)。重新启动开发服务器!
享受:)