ca.select(...).from 不是缩小后的函数

ca.select(...).from is not a function after minification

在我的 Angular app I'm using squel.js 中,在开发模式下使用时它工作正常。

然而,当我构建我的生产应用程序并尝试使用它时,我收到以下错误:

ca.select(...).from is not a function

在非缩小代码中对应于:

import * as squel from 'squel';

// ...

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

此问题是由 bug in squel.js 导致的,它在缩小后无法使用。

解决方案(解决方法)

1) 通过将 sqlite 作为脚本包含在 angular.json 中而不是使用 import,方法是将其添加到 projects.myAppName.architect.build.optionsscripts 数组中:

"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.Insertsquel.Delete 等...都将替换为 InsertDelete 等...当然我们需要导入它们:

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

这样我们使用 import 仅导入类型定义而不是整个库。

例子

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