Зачем мне запускать веб-сервер для использования d3? - PullRequest
0 голосов
/ 29 мая 2018

Я читаю различные руководства по d3js, и никто не объясняет, почему для использования d3 вам нужно запустить веб-сервер (будь то в Python или Node, ...).

Итак, зачем это нужно?

1 Ответ

0 голосов
/ 29 мая 2018

Иногда это не нужно.Но в целом, хорошая идея - реплицировать среду, в которой будет просматриваться ваш код, чтобы избежать непредвиденных проблем при публикации или ненужных разочарований из-за использования среды, не предназначенной для вашей технологии.

d3 предназначен для работы в браузере, причем некоторые его части требуют запуска на веб-странице для определенных браузеров.По моему опыту, проблемы, возникающие при открытии страницы d3 непосредственно в браузере с использованием файла URI , то есть file://, делятся на две категории: безопасность и URL-адреса без схемы.

БезопасностьОграничения

Протокол file:// часто имеет дополнительные ограничения.Для d3 особенно важны ограничения на использование XMLHttpRequest (используется в d3v4 и ниже) и fetch (используется в d3v5), которые формируют основу для загрузки файлов данных (например, с использованием d3.csv).

Chrome и другие браузеры обычно не разрешают запросы XMLHttpRequest или fetch к локальным файлам.Вы можете получить сообщение об ошибке, похожее на:

Запросы перекрестного источника поддерживаются только для схем протоколов: http, data, chrome, chrome-extension, https

YouВы можете узнать больше о том, как включить асинхронное чтение из локальных файлов, и о причинах его отключения по умолчанию из этого ответа: https://stackoverflow.com/a/18137280/6184972

Однако Firefox, похоже, не имеет этого ограничения.

URL-адреса без схемы

Некоторые примеры d3, особенно старые, включают d3 с использованием этого соглашения:

<script src="//d3js.org/d3.v3.min.js"></script>

* * * * * * * * * * * * * * * * * *1036*Протокол-относительные URL), что означает, что браузер может решить, какой протокол использовать.Это означает, что он будет использовать https://d3js.org, если страница загрузки использует https, и (возможно) http://d3js.org, если страница загрузки использует http.

К сожалению, при загрузке файла по протоколу file:// это означает, чтовышеупомянутый URL будет ссылаться на file://d3js.org/d3.v3.min.js, что, как правило, не то, что задумано.В этом случае вы можете получить сообщение об ошибке:

GET файл: //d3js.org/d3.v3.min.js net :: ERR_FILE_NOT_FOUND

Uncaught ReferenceError: d3 isне определено

Использование Бесчеркнутых URL вышло из употребления, вместо того, чтобы всегда использовать https://.См .: https://stackoverflow.com/a/31100809/6184972

Если это единственная проблема, с которой вы столкнулись, ее можно решить, включив протокол (т.е. изменив src="//d3js.org/d3.v3.min.js" на src="https://d3js.org/d3.v3.min.js"

Дополнительные ссылки:

https://developer.mozilla.org/en-US/docs/Learn/Common_questions/set_up_a_local_testing_server#The_problem_with_testing_local_files

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...