2017-05-24 13 views
5

짧은 버전입니다웹팩 암시 공급 업체/IE11에서 매니페스트 덩어리 - 약속은 정의되지 않은

내가 IE11에서 내 응용 프로그램을 실행할 때, 나는 오류가 manifest.js 파일 내에서 Promise is undefined 말을 얻는다.

는 어떻게하면 전에 매니페스트가 실행되어 실행되는 babel-polyfill 추가 또는 이와 유사한합니까?

내가 별도의 번들로 타사 (NPM 패키지) 스크립트를 분할하기 위해 내 웹팩 설정에 CommonsChunkPlugin를 추가하려고

긴 버전. Webpack 2 설명서에 따라 현대의 브라우저에서 잘 작동하는 "combined implicit common vendor chunks and manifest file"을 설정했습니다.

청크가 올바른 순서로 내 색인 파일에 포함되도록하는 기능을 작성했습니다 (아래 참조).

내이 명시 적 진입 점에 배경 비트 :

  • legacy_libs - script-loader으로 전역 네임 스페이스에 배치됩니다 이전 라이브러리. 내 주요 응용 프로그램의 진입 점

다른 두 (공급 업체 및 매니페스트) 암시 적 및 CommonsChunkPlugin로 만든입니다 - 나는 시간

  • 주 이상이 단계적 수 있도록 노력하겠습니다.

    IE11에서 실행하면 오류가 발생합니다 : Promise is undefined. 이것은 webpack 매니페스트 자체가 new Promise()입니다.

    내 주요 진입 점에는 import 'babel-polyfill';이 있습니다. & 매니페스트 청킹을 추가하기 전에 이것이 IE의 약속 부족을 극복 할 수있었습니다. 하지만 이제는 manifest.js를로드해야하므로 올바른 순서로 포함시키는 방법을 찾을 수 없습니다.

    내 설정은 그래서 다음과 같습니다 저도 같은 문제로 실행

    module.exports = { 
        entry: { 
        legacy_libs: './app/libs.js', 
        main: './app/main.js' 
        }, 
        ... 
        plugins: [ 
        // Extract third party libraries into a separate vendor bundle. 
        // Also extract webpack manifest into its own bundle (to prevent vendor hash changing when app source changes) 
        new webpack.optimize.CommonsChunkPlugin({ 
         name: 'vendor', 
         minChunks: function (module) { 
         return module.context && module.context.indexOf('node_modules') !== -1; 
         } 
        }), 
        new webpack.optimize.CommonsChunkPlugin({ 
         name: 'manifest' 
        }), 
    
        // Generate index.html file. 
        // Include script bundles in the right order based on chunk name prefixes. 
        new HtmlWebpackPlugin({ 
         template: 'app/index.ejs', 
         chunksSortMode: function (a, b) { 
         const chunkOrder = ['manifest', 'vendor', 'legacy_libs', 'main']; 
         const aChunk = chunkOrder.findIndex(chunk => a.names[0].startsWith(chunk)); 
         const bChunk = chunkOrder.findIndex(chunk => b.names[0].startsWith(chunk)); 
         const aValue = (aChunk > -1) ? aChunk : chunkOrder.length; 
         const bValue = (bChunk > -1) ? bChunk : chunkOrder.length; 
         return aValue - bValue; 
         } 
        }) 
    } 
    
  • 답변

    2

    이 웹팩 2.6.0 도입 문제가 될 것 같다, 버그가 이미 발행 : https://github.com/webpack/webpack/issues/4916

    그래서 bugfix가 공개되거나 2.5.1로 돌아갈 때까지 기다리십시오!

    +0

    정말 고맙습니다 .Seeni! Webpack 2.5.1로 돌아가서 링크를 해주셔서 감사합니다. Github에 관한 문제. 나는 버그 수정을 계속 주시 할 것이다. –

    0

    . 내 구성은 사용자의 구성과 비슷합니다 (공급 업체 & 목록). 내가 해결 한 방법은 babel-polyfill을 내 매니페스트의 진입 점에 추가하는 것이 었습니다. 귀하의 entry는 다음과 같이한다 :이 매니페스트 파일에 사용할 수 있도록

    entry: { 
        legacy_libs: './app/libs.js', 
        main: './app/main.js', 
        manifest: 'babel-polyfill' 
    } 
    

    는 polyfill을로드합니다.

    ERROR in CommonsChunkPlugin: While running in normal mode it's not allowed to use a non-entry chunk (manifest)

    그것은 다음과 같습니다 있도록 진입 점과 CommonsChunkPlugin을 수정하여 수정 :

    편집 : 구축 할 때 (이 dev에 서버에 잘 실행되지만)이 다른 오류를 반환 사용 :

    entry: { 
        legacy_libs: './app/libs.js', 
        main: './app/main.js', 
        'babel-polyfill': 'babel-polyfill' 
    }, 
    ... 
    plugins: [ 
        ... 
        new webpack.optimize.CommonsChunkPlugin({ 
         name: 'manifest', 
         chunks: 'babel-polyfill' 
        }), 
    ] 
    
    +2

    답장을 보내 주셔서 감사합니다 @Fleezey -이 여전히 나를 위해 작동하지 않습니다. 이것은 babel-polyfill.js 파일을 만들고 (webpackJsonp ([3] ....로 시작합니다.) manifest.js 앞에 그 파일을 포함 시키면'webpackJsonp'에 대한 에러가 발생합니다. 나는 manifest 후에 그것을 포함 시키지만, polyfilled되지 않은 Promise를 사용하여 manifest의 원래 문제를 얻는다. –