Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Uncaught TypeError: Cannot set properties of undefined (setting '$head') #141

Closed
deepfriedmind opened this issue Oct 17, 2022 · 4 comments
Closed

Comments

@deepfriedmind
Copy link

I've followed the installation instructions and when Vue.use(head) is run it errors out with:

Uncaught TypeError: Cannot set properties of undefined (setting '$head')

this happens in node_modules/@vueuse/head/dist/index.mjs on line 493, which is:

app.config.globalProperties.$head = head;

So here: https://github.com/vueuse/head/blob/main/src/index.ts#L159

I'm running Vue 2.7.13 and webpack 3.12.0 (can't currently update beyond webpack 3 due to other dependencies).

Full trace
index.mjs?f615:493 Uncaught TypeError: Cannot set properties of undefined (setting '$head')
    at Object.install (index.mjs?f615:493:1)
    at Vue.use (vue.common.dev.js?e87b:5670:1)
    at eval (main.js?3479:45:1)
    at Object.<anonymous> (app.js:4107:1)
    at __webpack_require__ (app.js:708:30)
    at fn (app.js:113:20)
    at Object.<anonymous> (app.js:4014:18)
    at __webpack_require__ (app.js:708:30)
    at app.js:806:39
    at app.js:809:10
install @ index.mjs?f615:493
Vue.use @ vue.common.dev.js?e87b:5670
eval @ main.js?3479:45
(anonymous) @ app.js:4107
__webpack_require__ @ app.js:708
fn @ app.js:113
(anonymous) @ app.js:4014
__webpack_require__ @ app.js:708
(anonymous) @ app.js:806
(anonymous) @ app.js:809
@vetruvet
Copy link
Contributor

SUPER hacky and totally not recommended workaround I came up with: https://codesandbox.io/s/gracious-silence-4b9h00?file=/src/main.js

@harlan-zw
Copy link
Collaborator

harlan-zw commented Oct 20, 2022

Hey guys, I haven't done much around the Vue 2.7 compatibility, I just know it was meant to support it.

I've fixed that specific issue in 1.0.0-rc.12. As far as I know, Vue 2.7 supports the prove/inject API?

Can try it out and let me know if you have any further issues?

@vetruvet
Copy link
Contributor

@harlan-zw rc.12 technically fixes the globalProperties error but there are still 2.7 compatibility issues, now these errors come up:

[Vue warn]: provide() can only be used inside setup().
[Vue warn]: injection "usehead" not found.
[Vue warn]: Error in setup: "Error: You may forget to apply app.use(head)"

@harlan-zw
Copy link
Collaborator

Hey @deepfriedmind. Thanks to @vetruvet's help, this should be fixed in v1.0.0-rc.14.

Please follow the v1 branch doc

// Vue 2
import { createHead, HeadVuePlugin } from "@vueuse/head"

Vue.use(HeadVuePlugin)
const head = createHead()

new Vue({
  el: '#app',
  // ...
  head,
})

Let me know if you have any issues with it

harlan-zw added a commit that referenced this issue Nov 12, 2022
* refactor!: v1 initial, CSR performance, awaitable hooks (#126)

* performance: rewrite reactivity for SSR / CSR

* chore: rolleback artifacts

* chore: progress commit

* fix: use ./src import

* refactor!: simplify utils for smaller pkg (#127)

* performance: rewrite reactivity for SSR / CSR

* chore: rolleback artifacts

* chore: progress commit

* fix: use ./src import

* refactor: simplify util code for smaller payload

* refactor!: continued (#128)

* performance: rewrite reactivity for SSR / CSR

* chore: rolleback artifacts

* chore: progress commit

* fix: use ./src import

* refactor: simplify util code for smaller payload

* wip: part two of refactor

* chore: fix tests

* chore: run github ci on v1

* chore: run github ci on v1

* chore: bump version

* Release v1.0.0-rc.0

* Release v1.0.0-rc.1

* fix: ensure empty attrs reset attrs (#130)

* fix: ensure empty attr is set

* fix: test valid tags

* fix(ci): release on rc

* Release v1.0.0-rc.2

* fix(ci): remove broken --pre

* Release v1.0.0-rc.3

* fix(ci): use --pre

* fix: use simpler API for tags (#131)

* feat: improved hook api (#132)

* chore: prefer runtime prop for id & position (#134)

* chore: prefer runtime prop for id & position

* fix: type errors

* fix: add `headTags` for backwards compatibility (#133)

* Release v1.0.0-rc.4

* fix: add legacy `addHeadObjs` (#135)

* refactor!: useHeadRaw -> useHeadSafe (#136)

* refactor!: useHeadRaw -> useHeadSafe

* feat: tree-shake encoding

* chore: useHeadSafe types

* Release v1.0.0-rc.5

* fix(types): export `MaybeComputedRef`

* chore: add missing `type`

* Release v1.0.0-rc.6

* chore(pkg): bump deps

* fix(titleTemplate): allow titleTemplate to resolve the title (#137)

* fix(titleTemplate): allow titleTemplate to resolve the title

* chore: add happy case

* chore: fix type issues

* chore: maybe fix type issue

* chore: maybe fix type issue

* chore: maybe fix type issue

* chore: maybe fix type issue

* Release v1.0.0-rc.7

* chore: bump deps

* chore: test issue #138

* chore: linting

* chore(pkg): bump deps

* Release v1.0.0-rc.8

* fix: ensure tags props are immutable (#139)

* Release v1.0.0-rc.9

* chore(pkg): bump deps

* Release v1.0.0-rc.10

* fix: ensure single pass of `htmlAttr` sanitization, fixes #142 (#143)

* fix: ensure csr elements are created equally (#145)

* fix: ensure csr elements are created equally

* fix: remove sanitising

* chore: fix doc

* chore(pkg): bump deps

* Release v1.0.0-rc.11

* fix: vue 2.7 globalProperties, fixes #141

* chore(pkg): bump zhead

* Release v1.0.0-rc.12

* add vue 2.7 compatibility to Head component (#147)

* add vue 2.7 compatibility to Head component

* remove vue-demi in favor of checking version from vue itself

* chore(pkg): bump deps

* fix: dedupe `htmlAttrs` and `bodyAttrs` for csr (#149)

* Release v1.0.0-rc.13

* fix: Vue 2.7 compatibility (#150)

* add separate vue2 plugin for 2.7 compatibility

* Vue 2.7 install readme

* fix: handle style / class attrs

* chore: add link back to pinia

* chore: vue2 example

Co-authored-by: Val Trubachev <val.trubachev@zoro.com>

* chore(pkg): ignore eslint in vue2 example

* Release v1.0.0-rc.14

* feat: migrate core to unhead (#157)

* feat: migrate core to unhead

* chore: fix SSR test with timeouts

* chore: readme link fix

* chore(pkg): bump deps

* chore(ci): switch to next channel

* chore: document install

* Release v1.0.0-next.1

* chore: improve doc

* chore: bump unhead, update tests and examples

* Release v1.0.0-next.2

* chore: bump unhead

* chore: expose `VueHeadMixin`

* Release v1.0.0-next.3

Co-authored-by: Valera Trubachev <vetruvet@gmail.com>
Co-authored-by: Val Trubachev <val.trubachev@zoro.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants