2017-02-04 55 views
1

npmライブラリavscのファサードを作成しようとしています。 sbt fastOptJS::webpackでコンパイルして.htmlファイルを開くと、ファイルtreepad-fastopt-bundle.js$g["Object"]["freeze"]($env);からUncaught TypeError: Cannot read property 'freeze' of undefinedが得られます。私はどこでもObject.freezeを使用しません。TypeError:未定義のプロパティ '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

この問題は、webpack configuration fileではwebpackではなく、WebブラウザでNode.jsの実行環境を対象とするようwebpackに指示するという問題が原因です。

しかし、お気づきのように、avscモジュールはfsというNode.jsモジュールを使用していますが、これはWebブラウザでは利用できません。あなたは全体のavscモジュールをインポートするため

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

なく、少なくとも最後に、右@JSImportは確か@JSImport("avsc", JSImport.Namespace)である:右の回避策は、このケースでは、あなたのWebPACKの構成ファイルに次の行を追加しているようですthe documentationに示すように、

関連する問題