TypeError: Cannot read property 'freeze' of undefined

TypeError: Cannot read property 'freeze' of undefined

我正在尝试为 npm 库创建外观 avsc。当我使用 sbt fastOptJS::webpack 编译并打开 .html 文件时,我在行 $g["Object"]["freeze"]($env); 中从文件 treepad-fastopt-bundle.js 中得到 Uncaught TypeError: Cannot read property 'freeze' of undefined。我不会在任何地方使用 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
}

也看看全文project,代码很少

使用 @JSImport("avsc", JSImport.Namespace) 并没有改变任何东西。

问题来自这样一个事实,即在您的 webpack configuration file 中,您告诉 webpack 以 Node.js 执行环境而不是网络浏览器为目标。

但是,如您所见,avsc 模块使用 fs Node.js 模块,该模块在网络浏览器中不可用。在这种情况下,似乎正确的解决方法是将以下行添加到您的 webpack 配置文件中:

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

最后,右边的@JSImport确实是@JSImport("avsc", JSImport.Namespace),因为要导入整个avsc模块,如图the documentation.