Как использовать Select2 с Electron (Uncaught TypeError: $ (...). Select2 не является функцией) - PullRequest
0 голосов
/ 03 июля 2019

Я нашел похожий вопрос здесь:
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

1 Ответ

0 голосов
/ 03 июля 2019

ОК, это проблема, если мы используем nodeIntegration = true в нашем окне Electron, нам нужно загрузить библиотеку Select2, используя require (не тег script) следующим образом:

require( 'YOUR PATH TO/select2.min.js' )(jQuery);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...