Búsqueda de sitios web

No se puede resolver 'jquery' con TypeScript


Tengo un problema para integrar TypeScript con jQuery en mi proyecto. Instalé tanto @types/jquery como jQuery usando npm, pero no puedo usarlos en mi .ts. Intento importar con:

import jquery from "jquery";
import * as $ from "jquery";
import jquery = require("jquery");
const jquery = require("jquery");
import jquery = require("@types/jquery");

Estas importaciones muestran error en tiempo de compilación:

Module not found: Error: Can't resolve 'jquery'

Mi configuración de webpack:

module.exports = {
  entry: './src/App.ts',
  plugins: [
    new CleanWebpackPlugin(['dist']),
    new HtmlWebpackPlugin({
      title: 'DQuiz'
    })
  ],
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        use: 'ts-loader',
        exclude: /node_modules/
      },
      { test: /\.hbs$/, loader: "handlebars-loader" }
    ]
  },
  resolve: {
    mainFields: ['browserify'],
    extensions: ['.tsx', '.ts', '.js']
  },
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  }
};

Respuesta #1

Probé construir mi proyecto en otra máquina con Ubuntu. Obtengo el mismo error:

Module not found: Error: Can't resolve 'jquery'

Con algunas búsquedas encontré una solución. Para Jquery 3.x, necesitas importar el módulo con 'jquery/src/jquery'.

Uso la solución sugerida por Tan Duong con el plugin proporcionado, creo que esta solución es más elegante para jQuery, entonces para importar, puedes usar:

const webpack = require('webpack');
module.exports = {
    plugins: [
        new webpack.ProvidePlugin({
            $: 'jquery/src/jquery',
            jquery: 'jquery/src/jquery'
        })
    ]
}

Gracias a todos por las respuestas :)

Respuesta #2

Pruébalo

plugins: [
    new CleanWebpackPlugin(['dist']),
    new HtmlWebpackPlugin({
      title: 'DQuiz'
    }),
    new webpack.ProvidePlugin({
        $: 'jquery',
        jQuery: 'jquery',
        'window.jQuery': 'jquery'
    })
],

o puedes seguir la estructura aquí