Ошибка типа: невозможно прочитать свойство '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
модуль, как показано в документации.