Так что я думаю, что у нас есть еще один классный вариант для этого, благодаря шаблонным литералам в ES6. Это позволяет нам обойтись без дополнительной рабочей функции (и ее странной области видимости) и просто написать код, предназначенный для рабочего, в виде многострочного текста, во многом как в случае, когда мы использовали для хранения текста, но без необходимости в документе или DOM сделать это в. Пример:
const workerScript = `
self.addEventListener('message', function(e) {
var data = e.data;
console.log('worker recieved: ',data);
self.postMessage('worker added! :'+ addOne(data.value));
self.close();//kills the worker
}, false);
`;
Вот сущность этого подхода .
Обратите внимание, что мы можем добавить любые дополнительные зависимости функций, которые мы хотим, в работника, просто собрав их в массив и запустив .toString для каждого из них, чтобы также сократить их до строк (должно работать, пока они функционируют) декларации), а затем просто добавив это в строку сценария. Таким образом, нам не нужно импортировать скрипты, которые мы, возможно, уже включили в объем кода, который мы пишем.
Единственный реальный недостаток этой конкретной версии заключается в том, что линтеры не смогут переворачивать код работника службы (так как это всего лишь строка), что является преимуществом для «подхода с отдельной функцией работника».