ERROR ReferenceError: Q не определен в проекте Angular 11

Я добавил пользовательский файл javascript в свой проект Angular 11 (myCustomJS.js), который использует библиотеку Q.

Однако я получаю ERROR ReferenceError: Q не определен в строке кода ниже в моем файле javascript.

Ошибка: ERROR ReferenceError: Q не определено

В сети: var deferred = Q.defer ();

К вашему сведению, я добавил следующие пакеты в package.config:

{
    "@types/q": "^1.5.4",
    "q": "^1.5.1",
}

Я добавил следующее в файл angular.json:

"scripts": [
    "node_modules/q/q.js",  // Added reference to Q Library
    "src/assets/js/myCustomJS.js"   // My Custom Javascript File
]

В файл tsconfig.app.json добавлены следующие типы:

"types": [
    "jquery",
    "q" // Added q type definitions
]

Не уверен, что мне не хватает каких-либо ссылок в моем проекте Angular 11. Подскажите, пожалуйста, как исправить ошибку Q is not defined.


person Chirag    schedule 08.01.2021    source источник
comment
Вероятно, вам не хватает импорта в свой app.module.ts или в любой другой модуль, который вы хотите использовать.   -  person Aw Snap    schedule 08.01.2021
comment
Я добавил import * как Q из 'q'; и добавил Q в массив импорта в app.module.ts, но это приводит к различным ошибкам компиляции ... например: TS2322: Тип 'typeof Q' не может быть назначен типу 'any [] | Тип ‹any› | ModuleWithProviders ‹{}› '   -  person Chirag    schedule 08.01.2021


Ответы (1)


Мне удалось решить проблему «Q not defined», прокомментировав 2 строки (строки № 46 и 47 - иначе, если блок) в файле /node_modules/q/q.js (см. Снимок экрана ниже). Из-за этих двух строк он не смог определить Q как глобальную переменную, особенно когда он находит RequireJS. После комментария он попадает в другой блок else if, где определяет глобальную переменную Q.

Прокомментировал блок RequireJS else-if

Вот несколько статей и различные решения, связанные с этой проблемой:

person Chirag    schedule 11.01.2021