시작 지점 : 단일 라이브러리 파일에서 Closure Compiler (ADVANCED_OPTIMIZATIONS 수준)에 의해 많은 js 파일이 성공적으로 컴파일됩니다 (경고/오류 없음). 이 JS 파일에서Closure Compiler로 컴파일 된 es6 모듈 라이브러리로 내 보낸 기호가 없습니다.
:
goog.require
및goog.provide
외부 필요whatever
(CONST/기능/클래스/VAR)의 앞에 사용되는 그들 사이/** @export */
을/내보내기 물건을 가져 오는 데 사용된다 도서관.
일부 HTML 파일에는이 라이브러리에 정의 된 whatever
에 모두 액세스 할 수있는 라이브러리 및 일부 비 컴파일 된 js가 포함되어 있습니다.
내가 원하는 무엇 : 다른 JS 파일에서
goog.require
이 클래스의 목록을import
로 대체, 기능 : 나는 각각에 대해 무슨 짓을 ES6 모듈 구문로 이동 파일을 JS
goog.provide
이 제거되고 다른 클래스의 앞에 추가 된export
, 다른 js 파일에서 필요한 기능 등- 시도해보십시오.
whatever
이 라이브러리 외부에 필요할 때마다/** @export */
에 대한 변경 사항이 없습니다. - 2보십시오 : 모든
/** @export */ whatever
는goog.exportSymbol('whatever', whatever)
로 대체이 성공적으로 (ADVANCED_OPTIMIZATIONS 수준이 여전히 경고/오류) 컴파일되지 않습니다.
문제는 지금 같은 HTML 파일을 라이브러리에 정의 된 모든 whatever
는 브라우저에 의해 "정의되지 않은"볼 수 있습니다. 실제로 Object.keys(window)
을 콘솔에 입력하면 컴파일러 (aa
, ba
, ca
등)가 변경 한 모든 심볼 이름을 볼 수 있지만 내 보낸 심볼 whatever
은 표시되지 않습니다.
예 : demoVisitors
은 라이브러리에 정의되어 있으며 외부에서 필요합니다. 라이브러리 파일에서 전에 ... w("demoVisitors",[Oa,La,Ma,Na]); ...
을 볼 수 있었으며 HTML 페이지에 콘텐츠가 제대로 표시되었습니다. es6 모듈이 변경된 후 시도 1에 대해 (demoVisitors
이 정의 된 파일 이름 임)과 시도 2에 대해 H("demoVisitors",[Na,Ka,La,Ma]);
을 볼 수 있습니다. demoVisitors
은 동일한 페이지에 대한 브라우저에서 정의되지 않았습니다.
@ export가 모듈에서 작동하는지 여부는 확실하지 않습니다. –
의견에 따라 @export를 goog.exportSymbol로 바 꾸었습니다. 컴파일 된 코드는 더 좋아 보이지만 브라우저에서는 아직 정의되지 않았습니다. 그에 따라 내 게시물을 업데이트했습니다. –