Почему d3-selection не может найти документ? Это связано с Astro?

Я использую v7.6.1 D3.js. Я тоже пользуюсь Астро. Я написал этот код:

      var margin = {top: 20, right: 30, bottom: 40, left: 90}, width = 460 - margin.left - margin.right, height = 400 - margin.top - margin.bottom;

d3.select("div")
    .append("svg")
        .attr("width", width + margin.left + margin.right)
        .attr("height", height + margin.top + margin.top)
    .append("g")
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

d3.json("./data.json", function (data) {
    console.log(data);
});

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

      file:///D:/thatheatedcoin/node_modules/d3-selection/src/select.js:5
      ? new Selection([[document.querySelector(selector)]], [document.documentElement])
                        ^

ReferenceError: document is not defined
    at Proxy.default (file:///D:/thatheatedcoin/node_modules/d3-selection/src/select.js:5:25)
    at eval (/src/components/viz.astro:17:25)
    at renderToIterable (/node_modules/astro/dist/runtime/server/index.js:463:27)
    at renderAstroComponentInline (/node_modules/astro/dist/runtime/server/index.js:132:28)
    at renderAstroComponentInline.next (<anonymous>)
    at _render (/node_modules/astro/dist/runtime/server/index.js:41:5)
    at async AstroComponent.[Symbol.asyncIterator] (/node_modules/astro/dist/runtime/server/index.js:60:7)
    at async renderAstroComponent (/node_modules/astro/dist/runtime/server/index.js:563:20)
    at async _render (/node_modules/astro/dist/runtime/server/index.js:39:5)
    at async _render (/node_modules/astro/dist/runtime/server/index.js:34:5)
error Command failed with exit code 1.

Может ли это быть связано с Астрономией? Если нет, то чем это вызвано? Спасибо!

1 ответ

Клиентская часть D3

Astro — это фреймворк генератора на стороне сервера, поэтому код в его переднем плане---работает на сервере, и только код в теле внутри тега выполняется на клиенте, там доступны окно и документ

см. также аналогичный вопрос, а не этот ответ с простым<script>тег, так как больше атрибутов не требуется. Как использовать элемент документа и окна в astro JS?

      ---
//Astro Front matter => runs on server only
---
<script>
    //here use document and use d3
</script>

Серверная часть D3

Это тоже возможно, но тогда все происходит без использования ни окна, ни документа, а генерация предоставляет svg, но для интерактивности вам нужно добавить клиентский js. см. Как использовать D3js на стороне сервера для прямого создания SVG?

Другие вопросы по тегам