1

我正在尝试为 npm 库avsc创建一个外观。当我编译sbt fastOptJS::webpack并打开 .html 文件时,我Uncaught TypeError: Cannot read property 'freeze' of undefined从 .html 行中的文件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)并没有改变任何东西。

4

1 回答 1

1

问题在于,在您的webpack 配置文件中,您告诉 webpack 以 Node.js 执行环境而不是 Web 浏览器为目标。

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

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

最后但同样重要的是,正确@JSImport的确实是@JSImport("avsc", JSImport.Namespace)因为您要导入整个avsc模块,如文档所示。

于 2017-02-04T09:52:54.377 回答