javascript - 使用 JSMin 压缩 JSDOM 时出现 JavaScript 压缩错误
问题描述
我的项目是使用 TypeScript 为前端开发的。
- Mocha - 用于单元测试
- JSDOM - 用于 DOM 模拟
- Hammer.js - 用于触摸 UX
- 咕噜声、JSMin 等
项目文件结构是这样的:
index.ts
mymodule.ts
mymodule_test.ts
由于 Hammer.js 在内部使用全局window
和document
对象,我在 import 语句之前添加了一些棘手的代码,仅用于测试目的。
mymodule.ts
1: import * as jsdom from 'jsdom';
2: if (typeof window === 'undefined') {
3: let testDom: HTMLDocument = jsdom.jsdom('', undefined);
4: (<any> global).window = testDom.defaultView;
5: (<any> global).document = testDom;
6: }
7: import * as Hammer from 'hammerjs';
...
现在测试运行成功。但是构建失败并吐出以下错误:
Running "shell:minify" (shell) task
/home/yunbo/Workspace/jobkey/frontend/node_modules/jsmin/jsmin.js:231
throw 'Error: unterminated string literal: ' + a;
^
Error: unterminated string literal:
我搜索了一段时间,发现了一些关于此类错误的 Q&A。为避免该错误,我应该修改 JSDOM 的内部代码或删除mymodule.ts
. 但两者都买不起。
- 如果我删除 1 - 6 行
mymodule.ts
,我将无法运行测试。 - 修改 JSDOM 或 JSMin 的原始代码似乎不是正确的方法。
我该如何解决这个问题?我应该使用另一个 JavaScript 缩小器吗?或者不应该测试mymodule.js
包含 Hammer.js 导入语句?
解决方案
推荐阅读
- vue.js - 方法中的导入和调用函数不起作用
- java - 当打开同一窗口的多个实例时,将数据传递到所需的窗口 Java
- microsoft-graph-api - 有没有办法将响应对象值从第一个请求传递到第二个请求作为图形批处理请求中的输入参数
- asp.net-core - 为什么模型绑定不起作用?ASP.NET Core 5.0 RazorPages
- c++ - Runnable 函数的 C++ 模板
- java - 如何显示提取数据的第一行结果?
- ios - UITableView:如何从底部滚动(如对话列表)?
- terraform - Terraform 同时使用 required_providers 和 provider 块
- javascript - 为什么在这个程序中忽略了 setTimeout?
- python - 如何在toplevel()Tkinter中使用画布制作按钮