2016-12-29 14 views
2

CommonsChunkPlugin을 사용하여 webpack2로 serviceworker 청크 (sw.js)를 만들려고하지만 서비스 엔지니어로 /sw.js를 등록하려고 할 때 오류 Uncaught ReferenceError: webpackJsonp is not defined.Servonseworker CommonsChunkPlugin이있는 청크가 작동하지 않습니다. webpackJsonp이 정의되지 않았습니다.

분명히 webpackJsonp은 청크를 비동기 적으로로드하고 내 serviceworker 파일을 엉망으로 만들고 있습니다. 어쨌든 serviceworker 덩어리에 대한 비동기 로딩을 제거 할 수 있습니까?

내 웹팩 설정 : 당신이 매니페스트의 묶음으로 만 웹팩 런타임 코드를 (webpackJsonp에 정의되어있는) 추출하고 다른 모든 스크립트 전에로드하면

{ 
    entry: { 
    main: [ 
     'react-hot-loader/patch', 
     `webpack-dev-server/client?http://${host}:${port}`, 
     'webpack/hot/only-dev-server', 
     './index.jsx', 
    ], 
    sw: './sw.js', 
    vendor: [...], 
    }, 
    output: { 
    filename: '[name].js', 
    path: resolve(__dirname, 'dist'), 
    publicPath: '/', 
    }, 
    resolve: { extensions: ['.js', '.jsx'] }, 
    performance: { hints: false }, 
    context: resolve(__dirname, 'src'), 
    devtool: 'inline-source-map', 

    devServer: { 
    hot: true, 
    host, 
    port, 
    contentBase: resolve(__dirname, 'dist'), 
    publicPath: '/', 
    }, 

    module: { 
    rules: [ 
     { 
     test: /\.jsx?$/, 
     use: 'babel-loader', 
     exclude: /node_modules/, 
     }, 
     { 
     test: /\.css$/, 
     loader: ExtractTextPlugin.extract('css-loader'), 
     }, 
    ], 
    }, 

    plugins: [ 
    new ExtractTextPlugin('main.css'), 
    new webpack.HotModuleReplacementPlugin(), 
    new webpack.NamedModulesPlugin(), 
    new webpack.optimize.CommonsChunkPlugin({ 
     names: ['vendor', 'manifest'], 
    }), 
    ], 
}; 

답변

0

, 그것은 작동합니다.

그래서, 당신은

plugins: [ 
    ... 
    new webpack.optimize.CommonsChunkPlugin({ 
     name: 'vendor' 
    }), 
    new webpack.optimize.CommonsChunkPlugin({ 
     name: 'manifest', 
     chunks: 'vendor', 
     minChunks: Infinity 
    }), 
    ], 
로 재 작성 할 것