2017-12-18 7 views
2

내가 다음해결 내보내기/가져 오기

(function(){ 

    window.GlobalObject = { 
     foo : function() { console.log("bar"); } 
    } 

})(); 

같은과 함께 Namespacing.js을 그리고 난

그래서
GlobalObject.newAttribute = { ... } 

내가 지금 웹팩와 함께 번들로하고있어 또 다른 MyScript.js을하고 난이었다 이 모듈을 사용하려고 tryng,하지만 그렇게 할 수 couldnt.

이 Namespacing.js에서 난 끝에 추가 :

export default GlobalObject; 

그럼 내가 MyScript.js에서 그것을 가져 tryed

import GlobalObject from "Namespacing" 

하지만 내 웹팩은 나에게 오류를 얻을 수

[14:58:44] GulpUglifyError: unable to minify JavaScript 
Caused by: SyntaxError: Unexpected token: name (Kneat) (line: 1, col: 7, pos: 7) 

any1이 내보내기/가져 오기를 수행하는 좋은 방법을 알고 있습니까?

+1

만약'export' 문을 IIFE 안에 넣으면 함수 나 조건문 내부가 아니라 최상위 레벨에서만 가져 오기/내보내기가 가능합니다. 외부에두면'GlobalObject'에 접근 할 수 없습니다. IIFE를 분리하십시오. –

답변

3

import/export으로 전환하려면 exports을 기존 파일에 추가 할 수 없으므로 구조를 변경해야합니다.

export const GlobalObject = { 
    foo : function() { console.log("bar"); } 
}; 

이 ... 명명 기호 GlobalObject 수출 : 예를 들어

, Namespacing.js 중 하나를 가질 것이다.

import { GlobalObject } from './Namespacing.js'; 

아니면 기본 수출로 해당 개체를 내보낼 수있다 (당신이 가져 모듈에 로컬로 다른 이름을 원하는 경우가 as 절을 사용할 수 있습니다.) : 그것은이 같은 가져올 것 :

export default { 
    foo : function() { console.log("bar"); } 
}; 
...이처럼 그것을 가져옵니다

import GlobalObject from './Namespacing.js'; 

이 경우, 가져 오는 모듈에서 GlobalObject에 대해 원하는 이름을 사용할 수 있습니다 (as 절이 필요 없음).


IIFE를 제거해야한다는 사실에 대해 걱정할 필요가 없습니다. 모듈은 본질적으로 범위가 지정되며 모듈 코드는 전역 범위에서 실행되지 않습니다.

+0

나는이 접근 방식을 시도 했으므로 모듈을 내 보낸다. 내 문제는 WebPack에서 실제로 GlobalObject를 전역으로 만들고있는 것 같다 .- –

+0

'window'에 쓰면 할 수있다 :'export const GlobalObject = {foo : function() {console.log ("bar"); }}; window.GlobalObject = GlobalObject;'하지만 적어도 하나의 다른 모듈이이를 가져 오기 위해 가져와야합니다. 물론 모듈 기반 환경에서는 전역 변수가 좋지 않습니다. (인생은 지저분합니다.) –

+0

나는이 접근법을 시도했다. (function() { window.GlobalObject = GlobalObject; alert ("TRIGGER"); })(); 다음 번들로 묶여있는 다른 js 파일에 : 'Import GlobalObject from "GlobalObject"는 WebObject ProvidePlugin과 Alias에 정의 된 GlobalObject를가집니다. 그래도 GlobalObject는 정의되지 않았습니다. 웹 패키지 번들 내의 모든 파일에 의해, 만약 내가 그것을 수출로 바꾼다면, 파일을 찾을 수없는 것처럼 보입니다. –