Я хочу конвертировать .tsx в .jsx с помощью Webpack, я искал некоторую информацию и обнаружил, что просто установил jsx в tsconfig.json для сохранения, но не удалось выполнить синтаксический анализ ts-загрузчика webpack, он показывает код ошибки:
ERROR in ./index.tsx 4:15
Module parse failed: Unexpected token (4:15)
You may need an appropriate loader to handle this file type.
| export default class Home extends React.Component {
| render() {
> return <div>
| <p>hello world</p>
| </div>;
Если jsx реагирует, такой ошибки нет , Как я могу решить эту проблему?
Вот некоторые из моих файлов:
tsconfig.json
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"moduleResolution": "node",
"jsx": "preserve"
},
"compileOnSave": false
}
index.tsx
import * as React from 'react'
type Props = {}
export default class Home extends React.Component<Props>{
render(): React.ReactNode {
return <div>
<p>hello world</p>
</div>
}
}
package.json
{
"name": "test",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"devDependencies": {
"fork-ts-checker-webpack-plugin": "^0.5.2",
"happypack": "^5.0.1",
"ts-loader": "^5.3.3",
"typescript": "^3.3.3",
"webpack": "^4.29.3",
"webpack-cli": "^3.2.3"
},
"dependencies": {
"react": "^16.8.1"
}
}
webpack.config.js
const fs = require('fs')
const path = require('path')
const HappyPack = require('happypack')
const os = require('os')
const happyThreadPool = HappyPack.ThreadPool({ size: os.cpus().length })
const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin')
module.exports = {
entry: './index.tsx',
output: {
path: path.join(__dirname, 'dist'),
filename: 'index.js'
},
module: {
rules: [
{
test: /\.(ts|tsx)$/,
exclude: /node_modules/,
use: 'happypack/loader?id=ts'
}
]
},
plugins: [
new HappyPack({
id: 'ts',
loaders: [
{
loader: 'ts-loader',
query: { happyPackMode: true }
}
],
threadPool: happyThreadPool,
verbose: true
}),
new ForkTsCheckerWebpackPlugin({ checkSyntacticErrors: true })
]
}