Skip to content

Commit

Permalink
fix: register meta plugin after other plugins
Browse files Browse the repository at this point in the history
BREAKING CHANGES: this module modifies `head` which may conflict with other modules, such as `@nuxtjs/pwa`. Make sure to add this module **after** `@nuxtjs/pwa` in your nuxt.config.

closes #307
  • Loading branch information
danielroe committed Nov 25, 2020
1 parent f5f876b commit 87535eb
Show file tree
Hide file tree
Showing 9 changed files with 73 additions and 8 deletions.
3 changes: 3 additions & 0 deletions docs/content/en/getting-started/setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ title: Quick start
description: '@nuxtjs/composition-api provides a way to use the Vue 3 Composition API with Nuxt-specific features.'
category: Getting started
position: 2
version: 0.161
---

## Quick start
Expand Down Expand Up @@ -38,6 +39,8 @@ position: 2

Note that [using `buildModules`](https://nuxtjs.org/api/configuration-modules#-code-buildmodules-code-) requires Nuxt >= 2.9. Just add it to your `modules` if you're on a lower version.

<alert type="warning">If you are using `@nuxtjs/pwa` (or any other module that modifies your global `head` properties), make sure to add this module after it in the `buildModules` list.</alert>

3. **Optional**. Currently [there's an issue with static site generation and async functions](https://github.com/nuxt-community/composition-api/issues/44) which means that you'll need to add time between pages being generated to allow for any async functions to resolve, if you are pre-generating any of your pages:

```js[nuxt.config.js]
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@
"@babel/preset-typescript": "^7.12.7",
"@nuxt/types": "^2.14.7",
"@nuxtjs/module-test-utils": "^1.6.3",
"@nuxtjs/pwa": "^3.2.2",
"@release-it/conventional-changelog": "^2.0.0",
"@types/fs-extra": "^9.0.4",
"@types/jest": "^26.0.15",
Expand Down
2 changes: 1 addition & 1 deletion src/entrypoint.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export { useAsync } from './async'
export { defineComponent } from './component'
export { useContext, withContext } from './context'
export { useFetch } from './fetch'
export { globalPlugin, onGlobalSetup } from './hooks'
export { globalPlugin, onGlobalSetup, setMetaPlugin } from './hooks'
export { useMeta } from './meta'
export { reqRef, reqSsrRef } from './req-ref'
export { ssrRef, shallowSsrRef, setSSRContext, ssrPromise } from './ssr-ref'
Expand Down
12 changes: 9 additions & 3 deletions src/hooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,15 @@ export const onGlobalSetup = (fn: SetupFunction) => {
globalSetup.add(fn)
}

/**
*
* @private
*/
export const setMetaPlugin: Plugin = context => {
const { head } = context.app
Object.assign(context.app, getHeadOptions({ head: head as any }))
}

/**
* @private
*/
Expand All @@ -41,9 +50,6 @@ export const globalPlugin: Plugin = context => {
reqRefs.forEach(reset => reset())
}

const { head } = context.app
Object.assign(context.app, getHeadOptions({ head: head as any }))

context.app.setup = function (...args) {
let result = {}
if (setup instanceof Function) {
Expand Down
5 changes: 5 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,11 @@ const compositionApiModule: Module<any> = function () {
},
})

this.addPlugin({
src: resolve(libRoot, 'templates', 'meta.js'),
fileName: join('composition-api', 'meta.js'),
})

const staticPath = join(this.options.buildDir || '', 'static-json')

this.nuxt.hook('generate:route', () => {
Expand Down
3 changes: 3 additions & 0 deletions templates/meta.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { setMetaPlugin } from '@nuxtjs/composition-api'

export default setMetaPlugin
14 changes: 12 additions & 2 deletions test/e2e/meta.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,12 @@ test('Shows correct title on server-loaded page', async t => {
await t.expect(Selector('title').innerText).eql('mounted title - Changed')

await t.click(Selector('button').withText('Set'))
await t.expect(Selector('meta').getAttribute('content')).eql('new message')
await t
.expect(Selector('meta[name=message]').getAttribute('content'))
.eql('new message')
await t
.expect(Selector('meta[name=viewport]').getAttribute('content'))
.eql('width=device-width, initial-scale=1')
await t.expect(Selector('noscript').textContent).eql('Test')

await t.click(Selector('a').withText('back'))
Expand All @@ -36,6 +41,11 @@ test('Shows correct title on client-loaded page', async t => {
await t.expect(Selector('title').innerText).eql('mounted title - Changed')

await t.click(Selector('button').withText('Set'))
await t.expect(Selector('meta').getAttribute('content')).eql('new message')
await t
.expect(Selector('meta[name=message]').getAttribute('content'))
.eql('new message')
await t
.expect(Selector('meta[name=viewport]').getAttribute('content'))
.eql('width=device-width, initial-scale=1')
await t.expect(Selector('noscript').textContent).eql('Test')
})
6 changes: 6 additions & 0 deletions test/fixture/nuxt.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -68,5 +68,11 @@ module.exports = {
},
buildModules: [
process.env.NODE_ENV === 'test' ? require('../..').default : rootDir,
'@nuxtjs/pwa',
],
pwa: {
icon: false,
manifest: false,
workbox: false,
},
}
35 changes: 33 additions & 2 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1531,6 +1531,19 @@
request "^2.88.2"
request-promise-native "^1.0.8"

"@nuxtjs/pwa@^3.2.2":
version "3.2.2"
resolved "https://registry.yarnpkg.com/@nuxtjs/pwa/-/pwa-3.2.2.tgz#e03c632e30f3df287a842d67323d945f36b97440"
integrity sha512-B+2VKwmaw40Wyds0hOKuN9R8ODHg7de8B7uQbzaZpLNuCinfKioQOk8jjaLDKRf4sndNG4AYI90Et4M+MRQetQ==
dependencies:
defu "^3.1.0"
execa "^4.0.3"
fs-extra "^9.0.1"
hasha "^5.2.2"
jimp-compact "^0.16.1"
lodash.template "^4.5.0"
workbox-cdn "^5.1.3"

"@nuxtjs/youch@^4.2.3":
version "4.2.3"
resolved "https://registry.yarnpkg.com/@nuxtjs/youch/-/youch-4.2.3.tgz#36f8b22df5a0efaa81373109851e1d857aca6bed"
Expand Down Expand Up @@ -5590,7 +5603,7 @@ defu@^2.0.4:
resolved "https://registry.yarnpkg.com/defu/-/defu-2.0.4.tgz#09659a6e87a8fd7178be13bd43e9357ebf6d1c46"
integrity sha512-G9pEH1UUMxShy6syWk01VQSRVs3CDWtlxtZu7A+NyqjxaCA4gSlWAKDBx6QiUEKezqS8+DUlXLI14Fp05Hmpwg==

defu@^3.2.2:
defu@^3.1.0, defu@^3.2.2:
version "3.2.2"
resolved "https://registry.yarnpkg.com/defu/-/defu-3.2.2.tgz#be20f4cc49b9805d54ee6b610658d53894942e97"
integrity sha512-8UWj5lNv7HD+kB0e9w77Z7TdQlbUYDVWqITLHNqFIn6khrNHv5WQo38Dcm1f6HeNyZf0U7UbPf6WeZDSdCzGDQ==
Expand Down Expand Up @@ -7326,6 +7339,14 @@ hash.js@^1.0.0, hash.js@^1.0.3:
inherits "^2.0.3"
minimalistic-assert "^1.0.1"

hasha@^5.2.2:
version "5.2.2"
resolved "https://registry.yarnpkg.com/hasha/-/hasha-5.2.2.tgz#a48477989b3b327aea3c04f53096d816d97522a1"
integrity sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==
dependencies:
is-stream "^2.0.0"
type-fest "^0.8.0"

he@1.2.0, he@^1.1.0, he@^1.1.1, he@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
Expand Down Expand Up @@ -8687,6 +8708,11 @@ jest@^26.6.3:
import-local "^3.0.2"
jest-cli "^26.6.3"

jimp-compact@^0.16.1:
version "0.16.1"
resolved "https://registry.yarnpkg.com/jimp-compact/-/jimp-compact-0.16.1.tgz#9582aea06548a2c1e04dd148d7c3ab92075aefa3"
integrity sha512-dZ6Ra7u1G8c4Letq/B5EzAxj4tLFHL+cGtdpR+PVm4yzPDj+lCk+AbivWt1eOM+ikzkowtyV7qSqX6qr3t71Ww==

jiti@^0.1.11, jiti@^0.1.12:
version "0.1.12"
resolved "https://registry.yarnpkg.com/jiti/-/jiti-0.1.12.tgz#ffe4a09266d739b77721170fb73115c50b680330"
Expand Down Expand Up @@ -13733,7 +13759,7 @@ type-fest@^0.6.0:
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==

type-fest@^0.8.1:
type-fest@^0.8.0, type-fest@^0.8.1:
version "0.8.1"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
Expand Down Expand Up @@ -14479,6 +14505,11 @@ wordwrap@^1.0.0:
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=

workbox-cdn@^5.1.3:
version "5.1.4"
resolved "https://registry.yarnpkg.com/workbox-cdn/-/workbox-cdn-5.1.4.tgz#dbd8acee70b1978be70106207590bbb76af935cf"
integrity sha512-04gM3mi8QGutokkSaA9xunVfjURnLbo9TTWyi8+pSDCEW5cD8u5GbJiliLK1vB9CShk/9OY1UDfW+XcmD+d6KQ==

worker-farm@^1.7.0:
version "1.7.0"
resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8"
Expand Down

0 comments on commit 87535eb

Please sign in to comment.