Я нашел похожий вопрос здесь:
Uncaught TypeError: $ (...). Select2 не является функцией
Но это не для Electron (вот другой вопрос с Electron без решения: https://github.com/select2/docs/issues/17),, и решение состоит в том, чтобы проверить, загружается ли jQuery дважды.
Как я могу проверить, загружаю ли я jQuery дважды?
На самом деле, я думаю, что это общая проблема для библиотек в Electron, когда мы используем «nodeIntegration = true» в нашем окне, потому что нам нужно добавить несколько хаков:
Это мой код:
<script>
window.$ = window.jQuery = require('jquery');
window.Popper = require('popper.js').default;
window.Bootstrap = require('bootstrap');
dt = require( 'datatables.net-bs4' )(window, window.$);
require( 'datatables.net-fixedheader-bs4' )(window, $);
//require( 'datatables.net-select-bs4' )(window, $);
</script>
<script src="../../js/select2.min.js"></script>
Ты видишь все эти уродливые хаки? во всяком случае, я чувствую, что не загружаю jQuery дважды, и даже если это так, я выбираю Select2 после всех остальных библиотек.
Может быть, потому, что я добавляю как скрипт вместо использования установленного модуля? не возможно их смешать?
UPDATE:
Может быть, проблема в этом коде из select2.js?
/*! Select2 4.0.7 | https://github.com/select2/select2/blob/master/LICENSE.md */
!function(a) {
"function" == typeof define && define.amd ? define(["jquery"], a) : "object" == typeof module && module.exports ? module.exports = function(b, c) {
return void 0 === c && (c = "undefined" != typeof window ? require("jquery") : require("jquery")(b)),
a(c),
c
}
: a(jQuery)
}(function(a) {
Я не до конца понимаю, что делает, но, похоже, проверяет module.exports, что верно в окне Electron с nodeIntegration = true