ca.select (...). from не является функцией после минификации - PullRequest
0 голосов
/ 18 июня 2019

В моем приложении Angular я использую squel.js , и он отлично работает при использовании в режиме разработки.

Однако, когда я создаю свое приложение для производства и пытаюсь использовать его, я получаю следующую ошибку:

ca.select (...). From не является функцией

, что в неминифицированном коде соответствует:

import * as squel from 'squel';

// ...

squel.select().from(...)

1 Ответ

0 голосов
/ 18 июня 2019

Проблема вызвана ошибкой в squel.js , которая не позволяет использовать ее после минимизации.

Решение (обходной путь)

1) Включить sqlite каксценарий в angular.json вместо использования import путем добавления его в массив scripts projects.myAppName.architect.build.options:

"scripts": [
  "node_modules/squel/dist/squel.min.js"
]

Сделайте то же самое для projects.myAppName.architect.test.options, чтобы исправить также и модульные тесты.


2) Теперь с рабочим комплектом все в порядке, но мы должны исправить типирование, чтобы компилятор ts тоже работал.

Поскольку мы удалили:

import * as squel from 'squel';

Все типы, такие как squel.Insert, будут разбиты.

Нам нужно добавить:

declare const squel: Squel & {flavour: null};

Теперь все типы, такие как squel.Insert, squel.Delete и т. Д ... будутзаменить на Insert, Delete и т. д. и, конечно же, нам нужно импортировать их:

import { Squel, Delete, Insert } from 'squel';

Таким образом, мы используем import только для импорта определений типов, а не всегобиблиотека.

Пример

https://github.com/azerothcore/Keira3/commit/98f191eb59cf9c853dd8a54a845a029c7a4ddef8

...