JavaScript ошибка сжатия при сжатии JSDOM с JSMin - PullRequest
3 голосов
/ 10 февраля 2020

Мой проект разработан с использованием TypeScript для внешнего интерфейса.

  • Mocha - для модульного теста
  • JSDOM - для DOM-насмешки
  • Hammer. js - для touch UX
  • Grunt, JSMin, et c.

Структура файла проекта выглядит примерно так:

index.ts
mymodule.ts
mymodule_test.ts

As Hammer. js использует глобальный объект window и document для внутреннего использования, перед оператором импорта я добавил несколько хитрых кодов для целей только тестирования.

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: 

Я некоторое время искал и нашел несколько вопросов и ответов о такой ошибке. Чтобы избежать этой ошибки, я должен изменить внутренний код JSDOM или удалить 1 - 6 строк в mymodule.ts. Но оба варианта недоступны.

  • Если я удаляю 1-6 строк в mymodule.ts, я не могу запустить тесты.
  • изменение исходного кода JSDOM или JSMin кажется не правильный путь.

Как я могу решить эту проблему? Должен ли я использовать другой JavaScript minifier? Или не стоит тестировать mymodule.js, который включает Hammer. js оператор импорта?

...