Нужен ли мне Babel, если я хочу поддерживать JavaScript в своем проекте TypeScript React? (без КРА)

Следующий код представляет собой конфигурацию моего веб-пакета для моего проекта React, написанного на TypeScript.

module.exports = {
  mode: 'development',
  entry: ['./src/main.tsx'],
  module: {
    rules: [
      {
        // Only setup a rule for ts/tsx, but no rule for js/jsx yet.
        test: /\.tsx?$/,
        exclude: /(node_modules|\.webpack)/,
        use: {
          loader: 'ts-loader',
          options: {
            transpileOnly: true,
          },
        },
      },
    ],
  },
  output: {
    filename: '[name].bundle.js',
    chunkFilename: '[name].chunk.js',
  },
  plugins: require('./webpack.plugins'),
  resolve: {
    extensions: ['.js', '.ts', '.json', '.jsx', '.tsx', '.css'],
    alias: {
      'react-dom': '@hot-loader/react-dom',
      ...require('./webpack.aliases'),
    },
  },
}

Я установил правило для расширения ts и tsx, но не установил правило js и jsx.

Мне интересно, нужно ли мне настраивать конфигурацию Babel и правило для загрузки js/jsx с помощью babel-loader, если я хочу поддерживать как TypeScript, так и JavaScript в моем проекте React, который не является проектом CRA?

Или, поскольку я уже настраиваю проект TypeScript, могу ли я просто использовать ts-loader для загрузки своих расширений js/jsx?

Javascript — это язык, на который компилируется babel/typescript. Вам не нужен ts-loader для загрузки js, ts-loader загружает машинописный текст, отсюда и название. Вы пытались просто добавить несколько файлов js?

Liam 04.11.2022 16:21

@Liam Я думаю, что загрузка JS с помощью ts-loader заставляет упакованный код JS компилироваться в целевую версию, которую я настраиваю в tsconfig. Если я не буду обрабатывать исходный код JS, возможно, эта версия не будет приемлемой для старого браузера?

Bugman Huang 04.11.2022 16:28

Ваш ts-загрузчик настроен только для переноса файлов ts(x), поэтому он ничего не сделает с вашими файлами js.

Liam 04.11.2022 16:30

Проблема скорее в jsx, чем в неподдерживаемых фичах. Трудно найти неподдерживаемую часто используемую функцию сейчас, когда IE мертв

Konrad 04.11.2022 16:31

@KonradLinkowski о да, ты прав! Но могу ли я загрузить jsx с помощью ts-loader? Или мне нужно установить правило для загрузки jsx с помощью babel-loader?

Bugman Huang 04.11.2022 16:36
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
106
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я только что нашел руководство по конвертации TS от Microsoft.

Короче говоря, они просто напрямую передают js/jsx вместе с ts/tsx в конвейер ts-loader, поскольку TypeScript также предлагает транспиляцию в более низкие версии ECMAScript и транспиляцию JSX с более коротким временем сборки в большинстве случаев.

module.exports = {
  ...
  resolve: {
    extensions: [".ts", ".tsx", ".js", ".jsx"]
  },
  module: {
    rules: [
      { test: /\.(t|j)sx?$/, use: { loader: 'ts-loader' }, exclude: /node_modules/ }, // here
      { enforce: "pre", test: /\.js$/, exclude: /node_modules/, loader: "source-map-loader" }
    ]
  },
  ...
}

Другие вопросы по теме