Ошибка типа: невозможно прочитать свойство 'freeze' из неопределенного

Я пытаюсь создать фасад для библиотеки npm avsc. Когда я собираю с sbt fastOptJS::webpack и открыть файл.html, я получаю Uncaught TypeError: Cannot read property 'freeze' of undefined из файла treepad-fastopt-bundle.js в соответствии $g["Object"]["freeze"]($env);, Я нигде не использую Object.freeze.

Это код фасада:

import buffer.Buffer
import scala.scalajs.js
import scala.scalajs.js.annotation.{JSImport, JSName}

@js.native
trait Type extends js.Object {
  @JSName("val")
  def toBuffer(v: String): Buffer = js.native
}

@JSImport("avsc/", "avro")
@js.native
object avro extends avro

@js.native
trait avro extends js.Object {
  def parse(schema: js.Any): Type = js.native
}

Также взгляните на весь проект, это очень мало кода.

С помощью @JSImport("avsc", JSImport.Namespace) вместо этого ничего не изменилось.

1 ответ

Решение

Проблема заключается в том, что в файле конфигурации вашего веб-пакета вы указываете веб-пакету ориентироваться на среду выполнения Node.js вместо веб-браузеров.

Однако, как вы заметили, avsc Модуль использует fs Модуль Node.js, который недоступен в веб-браузерах. Похоже, что правильным решением в этом случае является добавление следующей строки в файл конфигурации вашего веб-пакета:

module.exports.node = { fs: "empty" };

Не в последнюю очередь, право @JSImport это действительно @JSImport("avsc", JSImport.Namespace) потому что вы хотите импортировать весь avsc модуль, как показано в документации.

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