Перейти к содержимому

Устранение неполадок

Частые ошибки Elide с точными сообщениями и способами исправления: отсутствующие модули, Python, инструменты JVM, отказы песочницы, тайм-ауты, память и порты.

На этой странице

В каждом разделе приводится ошибка в том виде, в каком её выводит Elide, а затем способ исправления.

Нет такого встроенного модуля

Error: No such built-in module: node:http2

node:http2, node:cluster, node:inspector и node:wasi недоступны; require возвращает код ERR_UNKNOWN_BUILTIN_MODULE. Без префикса node: сообщение будет Cannot find module 'http2'. Пакет, который импортирует один из них при загрузке, например Fastify, завершается такой же ошибкой. Статус модуля смотрите в разделе Обзор API.

Модуль не найден после elide install

TypeError: Module not found: 'hono'

Простой elide install устанавливает только зависимости Maven. Если есть только package.json, команда ничего не выводит и завершается с кодом 0. Установите пакеты npm так:

elide install --ecosystems=npm

Python не установлен

Python support is not installed. Run 'elide setup python' to add it.

Код выхода 2. Выполните elide setup python; elide info перечисляет установленные языки в строке Languages:. Файл JavaScript, который импортирует модуль .py до установки Python, завершается с кодом 1 и сообщением Cannot import 'mod.py': Python support is not installed. и той же подсказкой. Когда Python установлен, вызовам между языками также нужен --interop; см. Языки и взаимодействие.

elide javac без --

error: '[-- TOOL_ARGS]…' can only be given after '--'

Usage: elide javac [FLAGS] [-- TOOL_ARGS]…

Аргументы для javac, java, kotlinc и других инструментов JDK указываются после --:

elide javac -- -d out Hello.java
elide java -- -cp out Hello

Классы Kotlin не работают под elide java

elide kotlinc -- -d kout Main.kt
elide java -- -cp kout MainKt
Exception in thread "main" java.lang.NoClassDefFoundError: kotlin/collections/CollectionsKt
	at MainKt.main(Main.kt:2)
	at MainKt.main(Main.kt)
Caused by: java.lang.ClassNotFoundException: kotlin.collections.CollectionsKt

elide java не добавляет стандартную библиотеку Kotlin. Запустите файл через elide run Main.kt или упакуйте приложение как Jvm.JvmApplication. kotlinc -include-runtime завершается ошибкой.

Отказы песочницы

СообщениеРазрешение
EACCES: permission denied, open 'hello.txt'--allow-read=PATHS или --allow-write=PATHS
Error: Filesystem read denied by policy: /app/node_modules/honoДобавьте хранилище npm в --allow-read; пакеты связываются ссылками в ~/.cache/aube
fetch to 'example.com:443' is not permitted; grant it with --allow-net=example.comФлаг из сообщения
spawn of 'echo' is not permitted; grant it with --allow-run=echoФлаг из сообщения
fetch to 'example.com:443' denied by --deny-netУберите хост из --deny-net
spawn of 'echo' denied by --deny-runУберите команду из --deny-run

См. Песочница и ограничения.

--deny-net без =

error: equal sign is needed when assigning values to '--deny-net=<HOSTS>'

Код выхода 2. Пишите --deny-net=example.com; то же относится к --deny-run. Флаги --allow-* принимают необязательное значение, поэтому --allow-net example.com run app.js разрешает все хосты и пытается запустить файл с именем example.com:

No file or script named 'example.com'

Код выхода 124

Error: --timeout 2s exceeded

Запуск остановил --timeout=DURATION. Увеличьте значение или уберите флаг.

Код выхода 3 и нехватка памяти

--heap-dump-on-oom=FILE записывает дамп кучи, когда куча заполнена, и затем завершается с кодом 3:

Dumping heap to …/oom.hprof ...
Heap dump file created [308989015 bytes in 0.988 secs]

Без этого флага заполненная куча завершает программу с кодом 1 и сообщением Could not allocate an unaligned heap chunk because the heap address space is exhausted. Увеличьте --max-mem. Значение 128m или меньше приводит к ошибке ещё до запуска программы:

Failed to create isolate: INSUFFICIENT_ADDRESS_SPACE (802)

Порт уже занят

node:http сообщает о занятом порте:

Error: listen EADDRINUSE 127.0.0.1:3000

Серверы с fetch-обработчиком (export default { fetch }, Elide.serve) ничего не сообщают: второй сервер на том же порту запускается, и запросы чередуются между двумя процессами. Сначала остановите старый:

ss -ltnp | grep :3000

Запрос возвращает 500, а ошибка не выводится

HTTP/1.1 500 Internal Server Error

Fetch-обработчик, который выбрасывает исключение, отвечает 500 Internal Server Error, не выводя ошибку. Оберните обработчик в try/catch и запишите ошибку в журнал. См. Создание HTTP-сервиса.

express.json() в Express останавливает сервер

TypeError: Buffer.isBuffer is not a function

express.json() и express.text() останавливают процесс на первом запросе с телом. Читайте тело сами или используйте express.raw(); см. Фреймворки.

Была ли эта страница полезной?