2017-02-04 15 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 대신 웹 브라우저 대신 Node.js 실행 환경을 대상으로 지정해야합니다.

그러나 주목할 수 있듯이 avsc 모듈은 웹 브라우저에서 사용할 수없는 fs Node.js 모듈을 사용합니다. 당신은 전체 avsc 모듈을 가져올 때문에

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

마지막으로 오른쪽 @JSImport 실제로 @JSImport("avsc", JSImport.Namespace)이다 : 올바른 해결 방법은,이 경우에, 당신의 웹팩 구성 파일에 다음 줄을 추가 할 것 같다 the documentation과 같이 표시됩니다.

관련 문제