reactjs - 如何为浏览器编译打字稿
问题描述
我有一个想要添加 TypeScript 和 React 支持的现有项目。因为该项目已经存在,所以我无法使用脚手架项目并且无法tsconfig.json
正确配置。
根据我使用的设置,我遇到了各种问题,但通常我/node_modules/**
在/node_modules/@types/**
. 我已经将我tsconfig.json
的评论包括在每个设置修复的错误中。
如何在没有导入/模块问题的情况下编译我的 TypeScript + React 项目?
当前相关tsconfig.json
设置
"module": "amd", // must be 'amd' or 'system' to use 'outFile'
"lib": ["es2015", "dom", "es5", "es6"], // must include some of these to suppress certain errors; adds the 'Set' type
"jsx": "react", // compile jsx to js
"sourceMap": true, // ensure debuggable
"outFile": "./static/js/app.js", // must be under /static/ to be served
"rootDir": "./static/ts",
"moduleResolution": "node", // suppresses issue with `default` or `export`
"esModuleInterop": true
当前误差
ReferenceError: define is not defined
(在浏览器中)
解决方案
我最终使用webpack
(与ts-loader
模块)而不是tsc
作为我的静态捆绑器。
我必须对我的打字稿进行的唯一更改是更改import React from "react";
为import * as React from "react"
.
tsconfig.json(缩写)
"target": "es5",
"module": "commonjs",
"lib": ["es5", "es6", "dom"],
"allowJs": true,
"jsx": "react",
"sourceMap": true,
"rootDir": "./client",
"downlevelIteration": true,
webpack.config.js
const path = require('path');
module.exports = {
context: path.resolve(__dirname, 'client'),
devtool: 'inline-source-map',
entry: './main.tsx',
mode: 'development',
module: {
rules: [{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/
}]
},
output: {
filename: 'client.js',
path: path.resolve(__dirname, 'static/js')
},
resolve: {
extensions: ['.tsx', '.ts', '.jsx', '.js']
},
};
推荐阅读
- flutter - Flutter - NoSuchMethodError:在 null 上调用了 getter 'isNotEmpty'
- docker - 错误:不可满足的约束:在 alpine docker 文件中更新包时
- azure - PowerShell 版本及其管理 Azure Active Directory 的能力有什么区别?
- oauth - 谷歌登录响应没有 idToken ionic4
- javascript - 引导导航栏折叠不适用于捆绑的引导文件
- java - 使用 IntelliJ 编译器 Maven
- powershell - Powershell将制表符分隔的CSV转换为不带引号的逗号分隔的CSV
- python - 如何让“随机”模块工作?我是否忘记导入某些内容,还是需要安装任何内容?
- java - CompletableFuture (java) 中的异常传播
- javascript - 用于图表的 Javascript 转换对象