2017-03-11 11 views
8

ओएस: विंडोज 10 प्रो
webpack: 1.14.0
sw-precache-webpack-प्लगइन: 0.9.1
sw-precache: 5.0.0सेवा कार्यकर्ता समाप्ति समय समाप्त टाइमर द्वारा रद्द कर दिया गया क्योंकि DevTools जुड़ा हुआ है

तो, मैं अपनी साइट लॉन्च करता हूं और कुछ क्षणों के लिए सक्रिय रूप से कुछ भी नहीं करता हूं, और फिर उपरोक्त निर्दिष्ट त्रुटि संदेश devTools में उत्पन्न होता है। कुछ प्रक्रिया किया जाता है, तो त्रुटि

ही नहीं उठता मेरी प्रतिक्रिया इस प्रकार कोड है:

webpack.config.prod.js

var path = require('path'); 
 
var webpack = require('webpack'); 
 
var SWPrecacheWebpackPlugin = require('sw-precache-webpack-plugin'); 
 

 
module.exports = { 
 
    devtool: 'source-map', 
 
    context: __dirname, 
 
    entry: { 
 
    main: path.resolve(__dirname, './client/app'), 
 
    }, 
 
    output: { 
 
    path: path.join(__dirname, '/public'), 
 
    filename: 'bundle.js', 
 
    publicPath: '/public/' 
 
    }, 
 
    plugins: [ 
 
    new webpack.optimize.OccurenceOrderPlugin(), 
 
    new webpack.DefinePlugin({ 
 
     'process.env': { 
 
     'NODE_ENV': "'production'" 
 
     } 
 
    }), 
 
    new webpack.optimize.UglifyJsPlugin({ 
 
     compressor: { 
 
     warnings: false 
 
     } 
 
    }), 
 
    new SWPrecacheWebpackPlugin(
 
     { 
 
     cacheId: 'flamingoCity', 
 
     filename: 'my-service-worker.js', 
 
     stripPrefix: path.join(__dirname, 'public').replace(/\\/g,"/"), 
 
     maximumFileSizeToCacheInBytes: 6194304, 
 
     minify: true, 
 
     runtimeCaching: [{ 
 
      handler: 'cacheFirst', 
 
      urlPattern: /[.]mp3$/, 
 
     }], 
 
     } 
 
    ), 
 
    ], 
 
    module: { 
 
    loaders: [ 
 
    // js 
 
    { 
 
     test: /\.js$/, 
 
     loaders: ['babel'], 
 
     include: path.join(__dirname, 'client') 
 
    }, 
 
    // CSS 
 
    { 
 
     test: /\.styl$/, 
 
     include: path.join(__dirname, 'client'), 
 
     loader: 'style-loader!css-loader!stylus-loader' 
 
    } 
 
    ] 
 
    } 
 
};

अनुप्रयोग। जेएस

/* 
 
    Import Dependencies 
 
*/ 
 
import React from 'react'; 
 
import { render } from 'react-dom'; 
 
import { Provider } from 'react-redux'; 
 
import { Router, Route, IndexRoute } from 'react-router' 
 
import 'babel-polyfill'; 
 

 
/* 
 
    Import Components 
 
*/ 
 
import App from './components/App'; 
 
import Single from './components/Single'; 
 
import PhotoGrid from './components/PhotoGrid'; 
 

 
/* Import CSS */ 
 
import css from './styles/style.styl'; 
 

 
/* Import our data store */ 
 
import store, { history } from './store'; 
 

 
/* 
 
    Error Logging 
 
*/ 
 

 
import Raven from 'raven-js'; 
 
import { sentry_url } from './data/config'; 
 
if(window) { 
 
    Raven.config(sentry_url).install(); 
 
} 
 

 
/* 
 
    Register Service Worker 
 
*/ 
 

 
if('serviceWorker' in navigator && process.env.NODE_ENV === 'production') { 
 
    navigator.serviceWorker.register('./my-service-worker.js').then(function(reg) { 
 
    // updatefound is fired if my-service-worker.js changes. 
 
    reg.onupdatefound = function() { 
 
    // The updatefound event implies that reg.installing is set; see 
 
    // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-container-updatefound-event 
 
    var installingWorker = reg.installing; 
 

 
    installingWorker.onstatechange = function() { 
 
     switch (installingWorker.state) { 
 
     case 'installed': 
 
      if (navigator.serviceWorker.controller) { 
 
      // At this point, the old content will have been purged and the fresh content will 
 
      // have been added to the cache. 
 
      // It's the perfect time to display a "New content is available; please refresh." 
 
      // message in the page's interface. 
 
      console.log('New or updated content is available.'); 
 
      } else { 
 
      // At this point, everything has been precached. 
 
      // It's the perfect time to display a "Content is cached for offline use." message. 
 
      console.log('Content is now available offline!'); 
 
      } 
 
      break; 
 

 
     case 'redundant': 
 
      console.error('The installing service worker became redundant.'); 
 
      break; 
 
     } 
 
    }; 
 
    }; 
 
    }).catch(function(e) { 
 
    console.error('Error during service worker registration:', e); 
 
    }); 
 
} 
 

 
/* 
 
    Rendering 
 
    This is where we hook up the Store with our actual component and the router 
 
*/ 
 
render(
 
    <Provider store={store}> 
 
    { /* Tell the Router to use our enhanced history */ } 
 
    <Router history={history}> 
 
     <Route path="/" component={App}> 
 
     <IndexRoute component={PhotoGrid} /> 
 
     <Route path="/view/:postId" component={Single}></Route> 
 
     </Route> 
 
    </Router> 
 
    </Provider>, 
 
    document.getElementById('root') 
 
);

यहां क्या समस्या है?

उत्तर

18

आम तौर पर, निष्क्रिय सेवा श्रमिकों को पृष्ठभूमि में चलने से रोकने के लिए आक्रामक रूप से मार डाला जाता है, जब इसकी आवश्यकता नहीं होती है।

क्रोम यह पता लगाने के लिए कदम उठाता है कि क्या DevTools खुले हैं, और जब यह है, तो सेवा कार्यकर्ता को स्वचालित रूप से मार नहीं देगा। धारणा यह है कि यदि कोई डेवलपर DevTools का उपयोग कर रहा है, तो वे सेवा कार्यकर्ता के व्यवहार को डिबगिंग या अन्यथा जांच कर सकते हैं, और सेवा कार्यकर्ता की हत्या डेवलपर को निराश कर देगी।

चुपचाप किया जा करने के लिए इस्तेमाल सेवा कार्यकर्ता के जीवनकाल का विस्तार है, लेकिन as described here, क्रोम की पिछले कुछ संस्करणों के लिए, संदेश

सेवा कार्यकर्ता समाप्ति समय समाप्त टाइमर द्वारा रद्द कर दिया गया क्योंकि DevTools जुड़ा हुआ है ।

कंसोल पर लॉग इन किया गया है ताकि डेवलपर को यह पता चल सके कि सेवा कार्यकर्ता सामान्य रूप से मारे गए थे, लेकिन देवटूल के खुले होने के कारण इसे मारने का काम रद्द कर दिया गया था।

आप पूछ सकते हैं, इससे क्या फर्क पड़ता है? डेवलपर को यह बताते हुए परेशान क्यों करें कि नहीं हुआ?

इस बात को इंगित करने के लिए प्रेरणा यह है कि डेवलपर को यह पता होना चाहिए कि वास्तविक उपयोगकर्ताओं को उत्पादन में क्या सामना करना पड़ेगा (यानी सेवा कार्यकर्ता बार-बार मारे गए/पुनरारंभ किए जा रहे हैं) इस डिबगिंग वातावरण में नहीं हो रहा है। इससे कोई फर्क पड़ता है यदि डेवलपर ने बग्गी सेवा कार्यकर्ता कोड लिखा है जो incorrect assumptions about the persistence of global state बनाता है। कोड लिखना आसान है जो मानता है कि वैश्विक राज्य हमेशा जारी रहेगा, और देवतुल्स के साथ चलने पर काम करता है (क्योंकि सेवा कार्यकर्ता कभी नहीं मारा जाता है), और फिर उत्पादन में काम करने में विफल रहता है।

संबंधित मुद्दे

 संबंधित मुद्दे