1

我正在尝试将 webpack 和离线插件添加到使用 gulp 的现有项目中 - webpack 工作得很好,但添加离线插件很难,

我所做的是添加离线插件 throw npm

webpack.confing.js

const {resolve} = require('path')
const webpackValidator = require('webpack-validator')
const OfflinePlugin = require('offline-plugin');

 module.exports = webpackValidator({
            context: resolve('app/scripts'),
            entry: ["./main.js","./skrollr.js"],
            output: {
                filename: "[name].[hash].js",
            },devtool: 'eval',
            module: {
                loaders :[
                        {test:/\.(jsx|js)$/,exclude: /node_modules/,loader: 'imports?jQuery=jquery,$=jquery,this=>window'},
                        { test: /\.css$/,exclude: /node_modules/, loader: "style-loader!css-loader" },
                        { test: /\.eot$/, loader: "file-loader" },
                        { test: /\.woff2$/, loader: "file-loader" },
                        { test: /\.woff$/, loader: "file-loader" },
                        { test: /\.svg$/, loader: "file-loader" },
                        { test: /\.ttf$/, loader: "file-loader" }]
                    },
            resolve: {
                        extensions: ['', '.js', '.jsx','.css','.eot','.woff2','.woff','.svg','.ttf']
                    },

                plugins: [new OfflinePlugin({
                    caches:{"main":['images/bgz.jpg','app/images/hamburger.svg','app/images/logo_grey.svg']},
                    externals:['images/bgz.jpg','app/images/hamburger.svg','app/images/logo_grey.svg'],ServiceWorker:{output:'/sw.js'}})]
});

main.js 是项目的主文件

var skrollr = require('./skrollr.js');
require('../styles/main.css');

 (function () {
   'use strict';
    $("#skrollr-body").css("background","green");

     require('../../node_modules/offline-plugin/runtime').install();
     if ('serviceWorker' in navigator) {
         navigator.serviceWorker.register('/sw.js', {scope:           './'}).then(function(registration) {

     document.querySelector('#status').textContent = 'succeeded';


        }).catch(function(error) {

          document.querySelector('#status').textContent = error;
       });
         } else {
           // The current browser doesn't support service workers.
              var aElement = document.createElement('a');
                aElement.href = 'http://www.chromium.org/blink/serviceworker/service-worker-faq';
            aElement.textContent = 'unavailable';
             document.querySelector('#status').appendChild(aElement);
          }

现在,当我运行我使用的项目时:

node_modules/.bin/webpack

它返回

hash: 496a6f3a79110e844236
Version: webpack 1.13.2
Time: 3167ms
                   Asset       Size  Chunks             Chunk Names
main.496a6f3a79110e844236.js    1.01 MB       0  [emitted]  main
                   sw.js    14.4 kB          [emitted]  
appcache/manifest.appcache  134 bytes          [emitted]  
appcache/manifest.html   58 bytes          [emitted]  
 [0] multi main 40 bytes {0} [built]
  + 8 hidden modules
  Child __offline_serviceworker:
    + 3 hidden modules

然后我运行 gulp 服务器:

gulp serve

我检查了 sw.js 返回并显示只有 bundle.js 提供的文件不是我添加到插件主 cahches 对象的任何文件:

var __wpo = {
"assets": {
 "main": [
   "../.././scripts/bundle.js"
   ],
  "additional": [],
   "optional": []
 },
"hashesMap": {
 "f250efd8234ae0d9bbb5e1db4a4ce8bf": "../.././scripts/bundle.js"
 },
 "strategy": "all",
 "version": "9/6/2016, 6:40:24 PM",
 "name": "webpack-offline",
 "relativePaths": true
 };

所以我使用离线插件的方式是正确的,以及如何添加其他文件以缓存和服务形式 serviceworker ,我应该添加什么配置来做它抛出 webpack confing autmatclicy

我的项目文件树:

/_
  /app
      /index.html
      /images
          /bgz.jpg
          /hamburger.svg
          /logo_grey.svg
      /fonts
      /scripts
         /main.js
         /bundel.js 

  /node_moudles
  sw.js
  packge.json
  webpack.config.js 
4

1 回答 1

0

我用这个:

new OfflinePlugin({
  version: '[hash]',
  responseStrategy: 'network-first',
  safeToUseOptionalCaches: true,
  ServiceWorker: {
    events: true,
    output: 'static/js/sw.js'
  }
})

它似乎包括所有资产。

于 2017-02-12T09:40:09.353 回答