Как включить требование в PhpStorm для моего кода JavaScript?

Я использую строку canvg('canvas', svg); в своем коде. Это означает, что мне нужен canvg.js.

Я включил canvg.js в свой html-заголовок. Однако это дает мне ошибку, что «require is undefined».

Для тех, кто не знает, первые две строки canvg.js:

var RGBColor = require('rgbcolor'),
    StackBlur = require('stackblur-canvas');

Сначала это появилось в моей консоли как ошибка. На самом деле это не было проблемой, так как код все еще работал.

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

error loading file: /test/tests/Dependencies/canvg.js:4: Uncaught ReferenceError: require is not defined

Я перешел на https://requirejs.org/docs/release/2.3.6/comments/require.js, скопировал и вставил код в файл с именем require236.js и сохранил его в моем проекте.

Затем я перешел к моему main.html и добавил свой <script src="require236.js"></script> прямо перед загрузкой canvg.

Я получил эти ошибки в консоли:

 Uncaught Error: Mismatched anonymous define() module: function(){return f}
https://requirejs.org/docs/errors.html#mismatch
   at makeError (require236.js:168)
   at intakeDefines (require236.js:1254)
   at require236.js:1452
require236.js:143 Uncaught Error: Module name "rgbcolor" has not been loaded yet for context: _. Use require([])
https://requirejs.org/docs/errors.html#notloaded
  at makeError (require236.js:168)
  at Object.localRequire [as require] (require236.js:1436)
  at requirejs (require236.js:1797)
  at canvg.js:4

И мои тесты не запускаются с этим файлом в качестве зависимости.

https://requirejs.org/docs/errors.html#mismatch говорит

Чтобы избежать ошибки:

Обязательно загрузите все скрипты, которые вызывают define() через RequireJS API.

Не кодируйте вручную теги сценариев в HTML для загрузки сценариев, в которых есть вызовы define().

Если вы вручную кодируете тег сценария HTML, убедитесь, что он включает только именованные модули и что анонимный модуль с тем же именем, что и один из модулей в этом файле, не загружен.

Если проблема заключается в использовании плагинов-загрузчиков или анонимных модулей, но оптимизатор RequireJS не используется для объединения файлов, используйте оптимизатор RequireJS.

Если проблема заключается в подходе var define lint, используйте стиль комментария /*global define */ (без пробела перед «global»).

Но я, честно говоря, не понимаю, как они рассчитывают его включить и где. Пожалуйста, используйте простые английские слова (или просто покажите пример кода), если вы понимаете его достаточно, чтобы объяснить.

Я бегу из PhpStorm. Я тестирую с помощью jsTestDriver. Должно быть, я как-то заявляю, что это неправильно, но я понятия не имею, как и почему require.js дает мне такие проблемы.


person Sharon    schedule 09.08.2019    source источник


Ответы (1)


Простой ответ заключается в том, что файл, который вы включили, не должен запускаться в браузере, поскольку он использует синтаксис CommonJS, который можно использовать только в коде на стороне сервера, выполняемом node.js< /сильный>.

Вы должны обязательно включить браузерную версию своей библиотеки, в которой нет вызовов require(), например:

<script src="https://cdn.jsdelivr.net/npm/canvg/dist/browser/canvg.min.js"></script>

см. https://github.com/canvg/canvg#usage-on-the-browser

person lena    schedule 09.08.2019
comment
Идеальный! Спасибо :) - person Sharon; 12.08.2019