2014-10-19 4 views
0

ecmascript 6 모듈 시스템을 처음 사용하려고합니다. 트레이서 컴파일러를 사용합니다. 을 감안할 때 두 ES6 파일 :ecmascript 6 모듈에서 실행 기능을로드했습니다.

// app.js 
export function row() { 
    alert('row'); 
} 

// init.js 
import { row } from 'public_js/app'; 
row(); 

Traceur (나는 꿀꿀 - traceur 작업을 사용)로 컴파일 :

<script src="/path/to/compiled/init.js" type="module"></script> 
: 나는 간단한 스크립트 태그를 통해 내 HTML에 init.js의 버전을 컴파일 포함

// app.js 
System.register("public_js/app", [], function() { 
    "use strict"; 
    var __moduleName = "public_js/app"; 
    function row() { 
    alert('row'); 
    } 
    return {get row() { 
     return row; 
    }}; 
}); 

// init.js 
System.register("public_js/init", [], function() { 
    "use strict"; 
    var __moduleName = "public_js/init"; 
    var row = System.get("public_js/app").row; 
    row(); 
    return {}; 
}); 

그리고 아무 일도 발생하지 않습니다. 내 경고가 표시되지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

+0

당신은 단지 그것을 선언 할 뿐이며 필요하지 않습니다. – Bergi

+0

script 태그에 type = "module"을 추가 하시겠습니까? –

+0

@BrianGenisio 오타였습니다. 제 코드에 타입 모듈이 있습니다. 스크립트가 없으면 시스템이 정의되지 않은 오류가 발생합니다. –

답변

2

코드를 ES5에 모듈로 미리 컴파일하면 ES6의 자동 가져 오기/모듈 로딩 시스템에서 제거되므로 ES5 메커니즘을 사용하여로드해야합니다. 따라서 type=module 속성없이 컴파일 된 코드 을 포함하고 나머지 세계를 쫓는 모듈은 get()이어야합니다.

그래서, 나를 위해 다음과 같은 작품 : 코드를 미리 컴파일되어 있기 때문에

<script src="/path/to/compiled/app.js"></script> 
<script src="/path/to/compiled/init.js"></script> 
<script> 
    System.get('public_js/init'); 
</script> 

, 난 당신이 그들 모두를 포함 방지하기 위해 하나의 JS 파일로 컴파일 된 코드의 모든을 연결하는 것이 좋습니다.

코드를 먼저 컴파일하지 않고 Traceur를 사용하면 ES6 구문 내에 살 수 있습니다. 여기에는 type="module" 및/또는 import 'module-name'이 포함됩니다. 더 이것에 대해 생각

편집 , app.js이 제대로 모듈로 컴파일됩니다. 그러나 init.js은 모듈로 컴파일 할 필요가 없습니다. --module 플래그로 코드를 컴파일 중입니다. 대신 init.js 플래그를 --script 플래그로 컴파일하면 init 코드를 모듈로 캡슐화하지 않으므로 System.get을 직접 호출 할 필요가 없습니다. 생각할 무언가.

+1

잘 작동합니다! 대단히 감사합니다. –