Uncaught TypeError: $(...).modal не является функцией с webpack при использовании bootstrap в приложении django

Посмотрел stackoverflow и поигрался с конфигурацией плагина webpack, но все равно получаю Uncaught TypeError: $(...).modal is not a function даже при импорте функции Bootstrap .modal через webpack. Импорты, которые я пробовал в файле для использования функции Bootstrap .modal, это import 'bootstrap' и import 'bootstrap/js/dist/modal'. Эти импорты находились непосредственно в файле, в котором они использовались. Все остальные импорты работают, кроме bootstrap, похоже.

webpack.config.js

module.exports = {
  mode: 'development',
  entry: {
    index: './objectivedeck/static/js/index.js',
    unauthed: './objectivedeck/static/js/unauthed.js'
  },
  output: {
    filename: 'main.js',
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist'),
    sourceMapFilename: "[name].js.map"
  },
  devtool: "source-map",
  plugins: [
    new webpack.ProvidePlugin({
      $: 'jquery',
      jQuery: 'jquery',
      'window.jQuery': 'jquery',
      Popper: ['popper.js', 'default'],
      Modal: 'exports-loader?Modal!bootstrap/js/dist/modal',
    }),
  ]
}

Я установил exports-loader и все компилируется и js подключается к выводу без каких-либо ошибок.

Поскольку у меня были проблемы с файлами исходной карты, я нашел решение на stackoverflow, и вы увидите, что я добавил отдельный вывод, которого обычно не бывает (sourceMapFilename: "[name].js.map"), но это решило проблему с исходной картой. К сожалению, это не решило проблему с .modal.

Единственное, к чему я, возможно, свел это к тому, что каким-то образом bootstrap не видит jquery и не создает функцию .modal, поскольку в исходном коде функция .modal создается только при наличии jquery, несмотря на то, что jquery уже является зависимостью Bootstrap.

Моя файловая структура на выходе выглядит так (смотрите ниже), а файл, который я загружаю - index.bundle.js, и браузер без проблем читает его и использует для всего остального, кроме функции .modal, которая почему-то не существует.

файл вывода

/dist
--index.bundle.js
--index.js.map

Не уверен, что происходит, но надеюсь, кто-то может указать на ошибку в моей конфигурации для использования bootstrap или что-то с неправильным импортом jquery. В файле, который пытается использовать функцию bootstrap .modal, или в файле записи, я не импортирую jQuery напрямую, но я пробовал импортировать его прямо в файл, и все еще нет изменений в ошибке.

Я с удовольствием добавлю любые необходимые файлы или информацию. спасибо, борющийся фрилансер

Наконец-то заработало!

Я отказался от работы с плагинами и просто использовал разделенные куски для загрузки jQuery.

webpack.config.js

const path = require('path')
const webpack = require('webpack')

module.exports = {
  mode: 'development',
  entry: {
    index: './objectivedeck/static/js/index.js',
    unauthed: './objectivedeck/static/js/unauthed.js'
  },
  output: {
    filename: 'main.js',
    filename: '[name].bundle.js',
    path: path.resolve(__dirname, 'dist'),
    sourceMapFilename: "[name].js.map"
  },
  devtool: "source-map",
  // plugins: [
  //   new webpack.ProvidePlugin({
  //     $: 'jquery',
  //     jQuery: 'jquery',
  //     'window.jQuery': 'jquery',
  //     Popper: ['popper.js', 'default'],
  //     Modal: 'exports-loader?Modal!bootstrap/js/dist/modal',
  //   }),
  // ],
  optimization: {
    splitChunks: {
      cacheGroups: {
        vendor: {
          test: /[\\/]node_modules[\\/]jquery[\\/]/,
          name: 'vendor',
          chunks: 'all',
        },
      },
    },
  },
}

Вот так теперь выглядит мой конфиг, и он работает как шарм.

Вернуться на верх