2017-02-04 21 views
1

Ich versuche avsc eine Fassade für die NPM-Bibliothek zu erstellen. Wenn ich mit sbt fastOptJS::webpack kompiliere und die HTML-Datei öffne, bekomme ich Uncaught TypeError: Cannot read property 'freeze' of undefined aus der Datei treepad-fastopt-bundle.js in der Zeile $g["Object"]["freeze"]($env);. Ich benutze Object.freeze es nirgendwo.Typeerror: kann Eigenschaft ‚Einfrieren‘ von undefined lesen

Dies ist die Fassade Code:

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 
} 

auch einen Blick auf die ganze project haben, ist es sehr wenig Code.

Mit @JSImport("avsc", JSImport.Namespace) wurde stattdessen nichts geändert.

Antwort

1

Das Problem kommt von der Tatsache, dass Sie in Ihrem webpack configuration file Webpack anweisen, die Node.js-Ausführungsumgebung anstelle von Webbrowsern anzusprechen.

Wie Sie jedoch bemerkt haben, verwendet das Modul avsc das Modul fs Node.js, das in Webbrowsern nicht verfügbar ist. Es scheint, dass das richtige Problem zu umgehen, in diesem Fall ist die folgende Zeile in Ihre webpack Konfigurationsdatei hinzufügen:

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

Last but not least, die richtige @JSImport ist in der Tat @JSImport("avsc", JSImport.Namespace), weil Sie die ganzen avsc Modul importieren möge wie in the documentation gezeigt.

Verwandte Themen