diff --git a/lib/webpack/shared.cjs b/lib/webpack/shared.cjs --- a/lib/webpack/shared.cjs +++ b/lib/webpack/shared.cjs @@ -255,4 +255,5 @@ createProdBrowserConfig, createDevBrowserConfig, createNodeServerRenderingConfig, + getBrowserBabelRule, }; diff --git a/web/package.json b/web/package.json --- a/web/package.json +++ b/web/package.json @@ -6,7 +6,7 @@ "license": "BSD-3-Clause", "scripts": { "clean": "rm -rf dist/ && rm -rf node_modules/", - "dev": "yarn concurrently --names=\"NODESSR,BROWSER\" -c \"bgBlue.bold,bgMagenta.bold\" \"yarn webpack --config webpack.config.cjs --config-name=server --watch\" \"yarn webpack-dev-server --config webpack.config.cjs --config-name=browser\"", + "dev": "yarn concurrently --names=\"NODESSR,BROWSER,WORKERS\" -c \"bgBlue.bold,bgMagenta.bold,bgCyan.bold\" \"yarn webpack --config webpack.config.cjs --config-name=server --watch\" \"yarn webpack-dev-server --config webpack.config.cjs --config-name=browser\" \"yarn webpack --config webpack.config.cjs --config-name=webworkers --watch\"", "prod": "yarn webpack --config webpack.config.cjs --env prod --progress", "test": "jest" }, diff --git a/web/push-notif/service-worker.js b/web/push-notif/service-worker.js new file mode 100644 --- /dev/null +++ b/web/push-notif/service-worker.js @@ -0,0 +1,9 @@ +// @flow + +self.addEventListener('install', () => { + console.log('service worker installed'); +}); + +self.addEventListener('activate', () => { + console.log('service worker activated'); +}); diff --git a/web/webpack.config.cjs b/web/webpack.config.cjs --- a/web/webpack.config.cjs +++ b/web/webpack.config.cjs @@ -6,6 +6,7 @@ createProdBrowserConfig, createDevBrowserConfig, createNodeServerRenderingConfig, + getBrowserBabelRule, } = require('lib/webpack/shared.cjs'); const babelConfig = require('./babel.config.cjs'); @@ -84,6 +85,21 @@ }, }; +const baseWebWorkersConfig = { + name: 'webworkers', + target: 'webworker', + entry: { + pushNotif: './push-notif/service-worker.js', + }, + output: { + filename: '[name].build.js', + path: path.join(__dirname, 'dist', 'webworkers'), + }, + module: { + rules: [getBrowserBabelRule(babelConfig)], + }, +}; + module.exports = function (env) { const browserConfig = env.prod ? createProdBrowserConfig(baseProdBrowserConfig, babelConfig) @@ -96,5 +112,9 @@ ...nodeConfig, mode: env.prod ? 'production' : 'development', }; - return [browserConfig, nodeServerRenderingConfig]; + const webWorkersConfig = { + ...baseWebWorkersConfig, + mode: env.prod ? 'production' : 'development', + }; + return [browserConfig, nodeServerRenderingConfig, webWorkersConfig]; };