TypeError:无法读取属性'冻结'未定义的

时间:2017-02-04 00:46:40

标签: scala.js scalajs-bundler

我正在尝试为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
}

另请查看整个project,它的代码非常少。

使用@JSImport("avsc", JSImport.Namespace)代替并没有改变任何内容。

1 个答案:

答案 0 :(得分:1)

问题来自这样一个事实:在webpack configuration file中,您告诉webpack定位Node.js执行环境而不是Web浏览器。

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

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

最后但并非最不重要的是,右@JSImport确实是@JSImport("avsc", JSImport.Namespace),因为您要导入整个avsc模块,如the documentation所示。