next-workbox
Advanced tools
Comparing version 1.4.1 to 2.0.0
95
index.js
@@ -1,77 +0,74 @@ | ||
const {join} = require('path') | ||
const {writeFileSync} = require('fs') | ||
const findCacheDir = require('find-cache-dir') | ||
const NextWorkboxWebpackPlugin = require('next-workbox-webpack-plugin') | ||
const {registerScript} = require('./service-worker-register') | ||
const { join } = require('path'); | ||
const { writeFileSync } = require('fs'); | ||
const findCacheDir = require('find-cache-dir'); | ||
const NextWorkboxWebpackPlugin = require('next-workbox-webpack-plugin'); | ||
const { registerScript } = require('./service-worker-register'); | ||
const defaultRegisterSW = { | ||
src: '/static/workbox/sw.js', | ||
scope: '../../' | ||
} | ||
src: '/sw.js', | ||
scope: '/' | ||
}; | ||
const appendRegisterSW = (entry, content) => { | ||
const originalEntry = entry | ||
const output = join(findCacheDir({name: 'next-workbox', create: true}), 'register-sw.js') | ||
const withSWContent = (entry, content) => { | ||
const originalEntry = entry; | ||
const output = join( | ||
findCacheDir({ name: 'next-workbox', create: true }), | ||
'register-sw.js' | ||
); | ||
writeFileSync(output, content) | ||
writeFileSync(output, content); | ||
return async () => { | ||
const entries = await originalEntry() | ||
const entries = await originalEntry(); | ||
if (entries['main.js']) { | ||
entries['main.js'].unshift(output) | ||
entries['main.js'].unshift(output); | ||
} | ||
return entries | ||
} | ||
} | ||
return entries; | ||
}; | ||
}; | ||
module.exports = (nextConfig = {}) => { | ||
return Object.assign({}, nextConfig, { | ||
webpack(config, options) { | ||
const { | ||
isServer, | ||
dev, | ||
buildId, | ||
defaultLoaders, | ||
config: { | ||
distDir | ||
} | ||
} = options | ||
const { | ||
isServer, | ||
dev, | ||
buildId, | ||
config: { distDir } | ||
} = options; | ||
if (!defaultLoaders) { | ||
throw new Error( | ||
'This plugin is not compatible with Next.js versions below 5.0.0 https://err.sh/next-plugins/upgrade' | ||
) | ||
} | ||
const { webpack, workbox = {} } = nextConfig; | ||
const registerSW = workbox.registerSW || defaultRegisterSW; | ||
const {webpack, workbox = {}} = nextConfig | ||
if (!isServer && !dev) { | ||
// append server-worker register script to main.js chunk | ||
if (workbox.registerSW) { | ||
const content = typeof workbox.registerSW === 'string' ? | ||
workbox.registerSW : registerScript(defaultRegisterSW) | ||
config.entry = appendRegisterSW(config.entry, content) | ||
} | ||
const content = typeof registerSW === 'string' ? | ||
registerSW : | ||
registerScript(registerSW); | ||
config.entry = withSWContent(config.entry, content); | ||
// cleanup params | ||
delete workbox.registerSW | ||
delete workbox.registerSW; | ||
// push workbox webpack plugin | ||
config.plugins.push(new NextWorkboxWebpackPlugin({ | ||
...workbox, | ||
distDir, | ||
buildId, | ||
})) | ||
config.plugins.push( | ||
new NextWorkboxWebpackPlugin({ | ||
...workbox, | ||
distDir, | ||
buildId, | ||
swDestRoot: `.next/static/${buildId}/pages`, | ||
swURLRoot: `_next/static/${buildId}/pages` | ||
}) | ||
); | ||
} | ||
if (typeof webpack === 'function') { | ||
return webpack(config, options) | ||
return webpack(config, options); | ||
} | ||
return config | ||
return config; | ||
} | ||
}) | ||
} | ||
}); | ||
}; |
{ | ||
"name": "next-workbox", | ||
"version": "1.4.1", | ||
"version": "2.0.0", | ||
"description": "Next.js plugins for workbox and PWA", | ||
@@ -10,7 +10,4 @@ "license": "MIT", | ||
"email": "ragingwind@gmail.com", | ||
"url": "https://ragingwind.me" | ||
"url": "https://jimmymoon.dev" | ||
}, | ||
"engines": { | ||
"node": ">=4" | ||
}, | ||
"scripts": {}, | ||
@@ -32,4 +29,4 @@ "files": [ | ||
"find-cache-dir": "^1.0.0", | ||
"next-workbox-webpack-plugin": "1.1.0" | ||
"next-workbox-webpack-plugin": "^2.1.1" | ||
} | ||
} |
// Service Worker snippets from https://github.com/codebusking/vue-hn-pwa-guide-kit/tree/master/build | ||
// all of comments was removed to convenience reason | ||
const unregisterScript = (unregister) => ` | ||
const unregisterScript = unregister => ` | ||
if ('serviceWorker' in navigator) { | ||
@@ -10,5 +10,5 @@ navigator.serviceWorker.ready.then(registration => { | ||
}) | ||
}` | ||
}`; | ||
const registerScript = ({src, scope, onUpdate}) => ` | ||
const registerScript = ({ src, scope, onUpdate }) => ` | ||
const allowsSW = Boolean(window.location.protocol === 'https:' || | ||
@@ -47,6 +47,6 @@ window.location.hostname === 'localhost' || | ||
}) | ||
` | ||
`; | ||
module.exports = { | ||
unregisterScript, | ||
registerScript | ||
} | ||
}; |
@@ -1,13 +0,22 @@ | ||
const React = require('react') | ||
const {unregisterScript, registerScript} = require('./service-worker-register') | ||
const React = require('react'); | ||
const { | ||
unregisterScript, | ||
registerScript | ||
} = require('./service-worker-register'); | ||
const ServiceWorker = ({src='/sw.js', scope='/', unregister = false, onUpdate = undefined}) => { | ||
const ServiceWorker = ({ | ||
src = '/sw.js', | ||
scope = '/', | ||
unregister = false, | ||
onUpdate = undefined | ||
}) => { | ||
return React.createElement('script', { | ||
dangerouslySetInnerHTML: { | ||
__html: unregister ? unregisterScript() : registerScript({src, scope, onUpdate}) | ||
} | ||
}) | ||
} | ||
dangerouslySetInnerHTML: { | ||
__html: unregister | ||
? unregisterScript() | ||
: registerScript({ src, scope, onUpdate }) | ||
} | ||
}); | ||
}; | ||
module.exports = ServiceWorker | ||
module.exports = ServiceWorker; |
127
117
9137
+ Added@babel/runtime@7.24.5(transitive)
+ Added@hapi/address@2.1.4(transitive)
+ Added@hapi/bourne@1.3.2(transitive)
+ Added@hapi/hoek@8.5.1(transitive)
+ Added@hapi/joi@15.1.1(transitive)
+ Added@hapi/topo@3.1.6(transitive)
+ Addednext-workbox-webpack-plugin@2.1.1(transitive)
+ Addedpretty-bytes@5.6.0(transitive)
+ Addedregenerator-runtime@0.14.1(transitive)
+ Addedworkbox-background-sync@4.3.1(transitive)
+ Addedworkbox-broadcast-update@4.3.1(transitive)
+ Addedworkbox-build@4.3.1(transitive)
+ Addedworkbox-cacheable-response@4.3.1(transitive)
+ Addedworkbox-core@4.3.1(transitive)
+ Addedworkbox-expiration@4.3.1(transitive)
+ Addedworkbox-google-analytics@4.3.1(transitive)
+ Addedworkbox-navigation-preload@4.3.1(transitive)
+ Addedworkbox-precaching@4.3.1(transitive)
+ Addedworkbox-range-requests@4.3.1(transitive)
+ Addedworkbox-routing@4.3.1(transitive)
+ Addedworkbox-strategies@4.3.1(transitive)
+ Addedworkbox-streams@4.3.1(transitive)
+ Addedworkbox-sw@4.3.1(transitive)
+ Addedworkbox-window@4.3.1(transitive)
- Removedhoek@4.3.1(transitive)
- Removedisemail@3.2.0(transitive)
- Removedjoi@11.4.0(transitive)
- Removednext-workbox-webpack-plugin@1.1.0(transitive)
- Removedpretty-bytes@4.0.2(transitive)
- Removedpunycode@2.3.1(transitive)
- Removedtopo@2.1.1(transitive)
- Removedworkbox-background-sync@3.6.3(transitive)
- Removedworkbox-broadcast-cache-update@3.6.3(transitive)
- Removedworkbox-build@3.6.3(transitive)
- Removedworkbox-cache-expiration@3.6.3(transitive)
- Removedworkbox-cacheable-response@3.6.3(transitive)
- Removedworkbox-core@3.6.3(transitive)
- Removedworkbox-google-analytics@3.6.3(transitive)
- Removedworkbox-navigation-preload@3.6.3(transitive)
- Removedworkbox-precaching@3.6.3(transitive)
- Removedworkbox-range-requests@3.6.3(transitive)
- Removedworkbox-routing@3.6.3(transitive)
- Removedworkbox-strategies@3.6.3(transitive)
- Removedworkbox-streams@3.6.3(transitive)
- Removedworkbox-sw@3.6.3(transitive)