Невозможно передать динамически сгенерированный массив кешируемых ссылок в Service Worker - PullRequest
0 голосов
/ 09 сентября 2018

Как передать программно заполненный массив ссылок на сценарий работника службы для кэширования?

Я создаю массив в cachelist.js следующим образом:

const fs = require('fs');
const path = require('path');
require('dotenv').config();

var cachedItems = ['/'];
function walkSync(currentDirPath, callback) {
    fs.readdirSync(currentDirPath).forEach(function (name) {
        var filePath = path.join(currentDirPath, name);
        var stat = fs.statSync(filePath);
        if (stat.isFile()) {
            callback(filePath, stat);
        } else if (stat.isDirectory()) {
            walkSync(filePath, callback);
        }
    });
}

walkSync('./pages/', function(filePath, stat) {
  cachedItem = filePath.substr(5);
  if(cachedItem.indexOf('_') == -1) {
    cachedItems.push(cachedItem);
  }
});

module.exports = { cachedItems };

И затем я пытаюсь использовать этот массив cachedItems в / offline / serviceWorker.js следующим образом:

const URLSTOCACHE = require("../cachelist.js");
const CACHE_NAME = "version-0.0.46";

// Call install event
self.addEventListener("install", e => {
  e.waitUntil(
    caches
    .open(CACHE_NAME)
    .then(cache => cache.addAll(URLSTOCACHE))
    .then(() => self.skipWaiting())
  );
});

// Call fetch event
self.addEventListener("fetch", e => {
  e.respondWith(
    fetch(e.request).catch(() => caches.match(e.request))
  )
});

Однако это не удается с "Uncaught ReferenceError: require не определен."Любой обходной путь?

1 Ответ

0 голосов
/ 09 сентября 2018

require не является встроенной утилитой на стороне браузера. Существуют различные библиотеки (например, RequireJS) и компоновщики (которые переписывают вызов require), но если вы не используете одну из них, вы не можете использовать require на стороне браузера.

Если ваша цель - прочитать этот файл в сервисном работнике и добавить URL-адреса в него в кеш, используйте fetch для его загрузки, а затем используйте thme в addAll.

...