Как использовать jquery с TypeScript, используя SystemJS в качестве загрузчика модуля (ReferenceError: jQuery не определен в Object.execute) - PullRequest
1 голос
/ 30 сентября 2019

Я еще правильно установил jquery с помощью команд:

npm install --save jquery

и

npm i --save @types/jquery

и

npm install -g typings

и

typings install dt~jquery --global –save

Я удалил типизацию папок из проводника файловой системы (потому что код Visual Studio не может удалить его по некоторым причинам), и я удалил файл typings.json. Я также выполнил следующую команду:

npm install --save-dev @types/jquery

Команды были выполнены в терминале кода Microsoft Visual Studio.

Я использую SystemJS для загрузки модулей.

Файл app.ts:

import $ from 'jquery';

(function($) {
    // Use $() inside of this function
    $("#app").css({"background-color": "green"});
})(jQuery);

Файл app.js:

System.register([], function (exports_1, context_1) {
    "use strict";
    var __moduleName = context_1 && context_1.id;
    return {
        setters: [],
        execute: function () {
            (function ($) {
                // Use $() inside of this function
                $("#app").css({ "background-color": "green" });
            })(jQuery);
        }
    };
});

Файл index.html:

<!doctype html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport"
              content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Learning TypeScript</title>
        <script src='node_modules/systemjs/dist/system.js'></script>
    </head>
    <body>
        <div id="app">Change it with jQuery</div>

        <script>
            System.import('./node_modules/jquery/dist/jquery.min.js');
            System.import('./app.js');
        </script>
    </body>
</html>

Ошибка при выполнении команды tsc.

Иногда jQuery работает нормально, но иногда при нажатии клавиши F5 (страница перезагрузки) в консоли веб-браузера Google Chrome 77.0 появляется следующая ошибка:

Uncaught (in promise) ReferenceError: jQuery is not defined
    at Object.execute (app.js:10)

Помогите, пожалуйста, правильно выполнить код jQuery,Большое спасибо заранее.

1 Ответ

0 голосов
/ 30 сентября 2019

TypeScript должен знать, откуда вы импортируете jQuery. $ явно объявлено правильно, но jQuery, возможно, не было.

Скорее всего, вам потребуется включить оператор импорта следующим образом, чтобы объявить jQuery:

import * as jQuery from 'jquery';

Кроме того, если у вас возникают проблемы с областью действия, вы можете попробовать объявить объекты jquery глобально после приведенного выше оператора импорта следующим образом:

window.$ = $;
window.jQuery = jQuery;

Наконец, если вы хотите убедиться, что app.ts используетлюбые определения jQuery, которые уже могут быть определены глобально, обновляют глобалы, только если они еще не существуют, как указано ниже:

window.$ = window.$ || $; 
window.jQuery = window.jQuery || jQuery;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...