2017-10-08 2 views
0

최근 webpack, babel 및이 모든 제품군을 사용하여 내 라이브러리 코드를 es6으로 변경했습니다.콘텐츠 파일을 가상/가상 URL로 만들기

그래서 내 작품은 결국 하나의 파일입니다. 이전에는 필자가 동적으로로드되는 파일이 많았습니다.

내 문제는 자신의 클래스 중 일부를 동적으로로드하는 다른 라이브러리를 사용하고 있으며이를 사용자 지정하기 위해 사용자 지정 개체/클래스에 URL을 제공해야한다는 것입니다. 많은 파일이 있었기 때문에 처음에는 문제가 아니었지만 이제는 내 코드가 하나의 파일로 묶입니다.

js/es6/... 일부 콘텐츠/문자열을 제공하고 가짜 URL을 만드는 방법이 있습니까? 다른 라이브러리가 '로드'합니까? 예를 들어

:

내 클래스

파일 ../myLib/CustomLayer2D.js 있습니다

Class CustomLayer2D { 
... 
} 

파일 ../myLib/CustomLayer3D.js

Class CustomLayer3D { 
... 
} 

파일 ../myLib/CustomLayer.js 이 다른 라이브러리를 사용하는 것입니다

Accessor.createSubClass([layer], { 

    viewModulePaths:{ 
     "2d": "need to provide here a url to 2d layer file", 
     "3d": "need to provide here a url to 3d layer file" 
    } 
}); 

파일 ../myLib/CustomLayer.js

Class CustomLayer2D { 
... 
} 

Class CustomLayer3D { 
... 
} 

Accessor.createSubClass([], { 

    viewModulePaths:{ 
     "2d": "need to provide here a path to 2d layer", 
     "3d": "need to provide here a path to 3d layer" 
    } 
}); 

I 선호하는 방법을 찾아 내 사용자 지정 클래스를 묶음에서 제외하지 않는 것이 좋습니다 (최후의 수단).

+1

확실하지 않음 URL.createObjectURL (new Blob ([ 'your text goes here'], {type : 'text/plain'}))'. – Kaiido

+0

이것은 내가 검색 한 것입니다 !! 나는이 방법을 알고 있었지만 어쨌든 그것은 내 마음에서 빠져 나갔다. 어쨌든, 나는 그것을 사용했고 효과가 있었다. 그래서 고맙다 @ 카이도. 내가 webpack –

답변

0

감사합니다. @ 카이도 의견과 많은 연구를 해 주셔서 감사합니다. 나는 완전한 해결책을 찾았습니다.

우리는 raw-loader을 실행하기 위해 파일을 추가합니다. 실제 코드를 묶는 대신 텍스트 파일을 그대로 묶을 것입니다.우리는 단순히 우리의 파일/S를 가져 <<The Code>>

URL.createObjectURL(new Blob([<<The Code>>], {type: 'text/plain'}));

그것은이

webpack.config.js rules 특성에 따라 모양에 넣어 우리의 코드에서

{ 
    test: /myLib\\CustomLayer2D.js|myLib\\CustomLayer3D.js/, 
    loader: 'raw-loader', 
} 

파일 MYLIB/CustomLayer.js 내가 웹팩 아무것도 몰라, 그래서 의견에 남아있을 것입니다,하지만, 그래, 당신은 URL을 가리키는를 만들 수 있기 때문에이 모든 질문에 대답하는 경우

import layer2DCode from './myLib/CustomLayer2D.js' 
import layer3DCode from './myLib/CustomLayer3D.js' 

Accessor.createSubClass([], { 

    viewModulePaths:{ 
     "2d": URL.createObjectURL(new Blob([layer2DCode], {type: 'text/plain'})), 
     "3d": URL.createObjectURL(new Blob([layer3DCode], {type: 'text/plain'})) 
    } 
}); 
0

Webpack은 모든 자산을 하나의 js 파일에 묶을 수 있지만 Webpack 또는 Webpack-dev-server와 별도의 js 파일을 사용할 수 있습니다.

당신은 webpack-dev-server's config를 사용하거나 동적으로 2D 또는 3D.js 파일을로드 할 웹팩 번들 파일 옆에 당신의 ../myLib/CustomLayer3D.js을 넣어 원래의 방법을 대신/필요로하는 것은 CustomLayer.js에서 그들을 가져옵니다.

다른 라이브러리는 무엇입니까? 클래스를 동적으로로드하는 다른 방법이있을 수 있습니다.

+0

네 대답을 게시 할 예정입니다. (번들에서 제외),하지만 난 단일 파일을 제공하고 지금은 3 제공해야 ... 알고있다 내가 사용하고있는 도서관은 esri 4 (gis 엔진) .. 아직 커스터마이징 방법을 제공하지 않았지만 내 라이브러리는 이미 있습니다. Dojo 툴킷을 사용하고 있습니다. 어쨌든, 나는 해결책을 찾지 못할 것이라고 생각하지만 묶음에서 제외시킨다. –

관련 문제