Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Импорт переменных Node JS

WOODSTYLE Ученик (165), на голосовании 1 год назад
Добрый день.

Я пытаюсь экспортировать переменную MemorisArchive.

Модуль с экспортом:

"export {WriteDate as WriteDate};
export {MemorisArchive as MemorisArchive}

//Глобальные переменные

let WriteDate={"Year":(new Date).getFullYear(), "Month":(new Date).getMonth(), "Data":(new Date).getDate() }

let ClearWindow=document.getElementById("WriteHere")
let theme=document.getElementById("theme")
let button=document.getElementById("PostConfirm")
let count=1
let MemorisArchive=[]
 Модульс импортом:

import{MemorisArchive} from "./public/app.js"

При запуске приложения выдается ошибка:

ReferenceError: document is not defined
at file:///C:/qwerty/public/app.js:10:17
at ModuleJob.run (node:internal/modules/esm/module_job:198:25)
at async Promise.all (index 0)
at async ESMLoader.import (node:internal/modules/esm/loader:409:24)
at async loadESM (node:internal/process/esm_loader:85:5)
at async handleMainPromise (node:internal/modules/run_main:61:12)

По какой причине Node пытается импортировать то, что не прописано в export {}? В частности, вот эту переменную:

ClearWindow=document.getElementById("WriteHere") ?

Голосование за лучший ответ
Яков Гото Искусственный Интеллект (320911) 1 год назад
Node.js при импорте считывает указанные файлы целиком, а не только то, что указано в export и import. И логично, что ругается на document, который ему неизвестен. Модули нужно писать таким образом, чтобы в них все соответствовало стандартам Node.js. И это не проблема конкретного случая, а сама специфика.
WOODSTYLEУченик (165) 1 год назад
Т.е. мне нужно импортировать нужные мне переменные в некий "отстойник", а оттуда в нужный мне модуль?
Яков Гото Искусственный Интеллект (320911) Нужно избавиться от всего, что не соответствует стандартам node.js, в файлах модулей. Иначе он в любом случае будет ругаться. То есть, писать код там, где не требуется node.js. Скажем, если тебе нужно использовать api браузера, то создаешь файл на чистом JS, импортируешь туда модули и пишешь все, что нужно, никуда не экспортируя этот файл.
Devil D. Nudo Ученик (117) 1 год назад
1. Когда в node.js стал работать document?
2. Ты используешь type="module" для <script>?
Если 1, то скажу так: В Node.js глобальная переменная document, window.globalThis и всё то что в window по дефолту не будет работать
Если 2, то хз
Михаил Просветленный (30520) 1 год назад
Похоже, что вы используете ECMAScript модули для экспорта и импорта переменных в Node.js. В этом случае вы должны использовать ключевые слова
 export 
и
 import 
, а не
 module.exports 
и
 require 
.

Однако, когда вы используете ECMAScript модули в Node.js, вы не можете обращаться к глобальным переменным, таким как
 document 
, которые доступны только в браузере. Это приводит к ошибке ReferenceError: document is not defined.

Чтобы решить эту проблему, вы можете:

- Переключиться на CommonJS модули и использовать
 module.exports 
и
 require 
.
- Использовать библиотеку или полифилл для эмуляции объекта
 document 
в Node.js, например jsdom или domino.
- Перенести код, который работает с объектом
 document 
, в отдельный файл и загружать его только в браузере.
Похожие вопросы