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.options
的 scripts
数组中:
"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
在我的 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.options
的 scripts
数组中:
"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