Open stefanpenner opened 3 years ago
It appears the deprecated ember-cli-template-lint
is not compatible with ember-source 4x. Specifically because one of it's plugins's constructor is now being interpreted as a plugin most likely due to https://github.com/glimmerjs/glimmer-vm/commit/28652d4ea214f1c7bf0251d4b4b23853d9f0a787 and possibly https://github.com/emberjs/ember.js/commit/bbb62dde664772ae5ce75b460ce878ed758747cd
Now it seems pretty reasonable that a deprecated plugin causes a failure, but it isn't clear yet if this effects non-deprecated plugins, and also the debugging of this wasn't ideal.
I'll dig in some more..
Ok. Solution: Ensure your template compiler plugins follow the new form only.
In my case, ember-cli-template-lint's plugins where simply incompatible with the new plugin form introduced by https://github.com/glimmerjs/glimmer-vm/commit/28652d4ea214f1c7bf0251d4b4b23853d9f0a787, and required upgrading to ember-template-lint
. Given that ember-cli-template-lint
is deprecated, in this scenario it is likely perfectly reasonable solution.
That being said, the debugging on this is quite sub-optimal, and I although I hope folks running into this problem at helped by this issue, i suspect (assuming the above is a reasonable change) that better detection of the failure mode could go a long way. Specifically https://github.com/glimmerjs/glimmer-vm/blob/ef92c497c3d921af22b38a54eac1445c204c3370/packages/%40glimmer/syntax/lib/parser/tokenizer-event-handlers.ts#L447 could detect a return value without { visitor() { } }
and provide throw an actionable error
@stefanpenner thank you for the write-up; I will be fixing a bunch of addons with this issue over the next few weeks, I expect. I’ll report them here as I find them so that the community has a resource to know what to update!
Sooner™
Hey @stefanpenner im trying to upgrade our app and keep getting this error with no helpful stack trace and error report. Any suggestions on what I should do next? Here is the error report (with removed app name and source):
=================================================================================
ENV Summary:
TIME: Wed Jan 05 2022 13:46:20 GMT-0700 (Mountain Standard Time)
TITLE: ember
ARGV:
- ~/.nvm/versions/node/v12.22.6/bin/node
- app/node_modules/.bin/ember
- server
- --host
- 0.0.0.0
EXEC_PATH: ~/.nvm/versions/node/v12.22.6/bin/node
TMPDIR: /var/folders/yk/kptk04814qb3jhq5tzl81qgc0000gn/T
SHELL: /bin/zsh
PATH:
- /var/folders/yk/kptk04814qb3jhq5tzl81qgc0000gn/T/yarn--1641415527409-0.7370864348357087
- app/node_modules/.bin
- ~/.config/yarn/link/node_modules/.bin
- ~/.nvm/versions/node/v12.22.6/libexec/lib/node_modules/npm/bin/node-gyp-bin
- ~/.nvm/versions/node/v12.22.6/lib/node_modules/npm/bin/node-gyp-bin
- ~/.nvm/versions/node/v12.22.6/bin/node_modules/npm/bin/node-gyp-bin
- ~/.nvm/versions/node/v12.22.6/bin
- ~/.rbenv/shims
- /usr/local/bin
- /usr/bin
- /bin
- /usr/sbin
- /sbin
- ~/.rvm/bin
PLATFORM: darwin x64
FREEMEM: 34713600
TOTALMEM: 34359738368
UPTIME: 6915947
LOADAVG: 7.25048828125,6.36767578125,4.509765625
CPUS:
- Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz - 2400
- Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz - 2400
- Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz - 2400
- Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz - 2400
- Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz - 2400
- Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz - 2400
- Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz - 2400
- Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz - 2400
- Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz - 2400
- Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz - 2400
- Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz - 2400
- Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz - 2400
- Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz - 2400
- Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz - 2400
- Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz - 2400
- Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz - 2400
ENDIANNESS: LE
VERSIONS:
- ares: 1.17.2
- brotli: 1.0.9
- cldr: 37.0
- http_parser: 2.9.4
- icu: 67.1
- llhttp: 2.1.3
- modules: 72
- napi: 8
- nghttp2: 1.41.0
- node: 12.22.6
- openssl: 1.1.1l
- tz: 2019c
- unicode: 13.0
- uv: 1.40.0
- v8: 7.8.279.23-node.56
- zlib: 1.2.11
ERROR Summary:
- broccoliBuilderErrorStack: TypeError: Cannot read property 'visitor' of undefined
at preprocess (app/node_modules/ember-source/dist/ember-template-compiler.js:11823:40)
at normalize (app/node_modules/ember-source/dist/ember-template-compiler.js:12458:15)
at precompileJSON (app/node_modules/ember-source/dist/ember-template-compiler.js:5257:47)
at precompile (app/node_modules/ember-source/dist/ember-template-compiler.js:5290:31)
at Object.precompile (app/node_modules/ember-source/dist/ember-template-compiler.js:18461:37)
at TemplateCompiler.processString (app/node_modules/ember-cli-htmlbars/lib/template-compiler-plugin.js:68:55)
at Object.processString (app/node_modules/ember-cli-htmlbars/node_modules/broccoli-persistent-filter/lib/strategies/persistent.js:45:36)
at runMicrotasks (<anonymous>:null:null)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at invoke (app/node_modules/ember-cli-htmlbars/node_modules/broccoli-persistent-filter/lib/index.js:84:12)
- code: [undefined]
- codeFrame: Cannot read property 'visitor' of undefined
- errorMessage: app/templates/application.hbs: Cannot read property 'visitor' of undefined
in /var/folders/yk/kptk04814qb3jhq5tzl81qgc0000gn/T/broccoli-99032Wpf3w6If5mQl/out-847-colocated_template_processor
at TemplateCompiler
- errorType: Template Compiler Error
- location:
- column: [undefined]
- file: app/templates/application.hbs
- line: [undefined]
- treeDir: /var/folders/yk/kptk04814qb3jhq5tzl81qgc0000gn/T/broccoli-99032Wpf3w6If5mQl/out-847-colocated_template_processor
- message: app/templates/application.hbs: Cannot read property 'visitor' of undefined
in /var/folders/yk/kptk04814qb3jhq5tzl81qgc0000gn/T/broccoli-99032Wpf3w6If5mQl/out-847-colocated_template_processor
at TemplateCompiler
- name: Error
- nodeAnnotation: [undefined]
- nodeName: TemplateCompiler
- originalErrorMessage: Cannot read property 'visitor' of undefined
- stack: TypeError: Cannot read property 'visitor' of undefined
at preprocess (app/node_modules/ember-source/dist/ember-template-compiler.js:11823:40)
at normalize (app/node_modules/ember-source/dist/ember-template-compiler.js:12458:15)
at precompileJSON (app/node_modules/ember-source/dist/ember-template-compiler.js:5257:47)
at precompile (app/node_modules/ember-source/dist/ember-template-compiler.js:5290:31)
at Object.precompile (app/node_modules/ember-source/dist/ember-template-compiler.js:18461:37)
at TemplateCompiler.processString (app/node_modules/ember-cli-htmlbars/lib/template-compiler-plugin.js:68:55)
at Object.processString (app/node_modules/ember-cli-htmlbars/node_modules/broccoli-persistent-filter/lib/strategies/persistent.js:45:36)
at runMicrotasks (<anonymous>:null:null)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
at invoke (app/node_modules/ember-cli-htmlbars/node_modules/broccoli-persistent-filter/lib/index.js:84:12)
=================================================================================
@npendery could you please check if you still have ember-cli-template-lint
installed? If not, what version of ember-template-lint
you have? (I believe you should be on v3 to make things work)
@SergeAstapov no ember-cli-template-lint
and latest ember-template-lint
. I tried both v4 and v3 of ember-template-lint
@npendery I've seen this issue multiple times and various projects/addons and it always was resolved with ember-template-lint
upgrade.
Couple things come to my mind:
ember-cli-htmlbars
with latest v5 or v6yarn.lock
/package-lock.json
and reinstall dependencies.hope it helps!
@SergeAstapov I tried all of that (as well as yarn cache clean
) with no avail 😞
If you think of anything else, im all ears. Thanks for the feedback, really appreciate it!
@stefanpenner I am facing this same issue too when trying to upgrade from 3.28 to 4. I replaced ember-cli-template-lint with ember-template-lint and made sure the htmlbars version I have as a direct dependency is the latest. Howewer, I do have dependencies relying on an older version of htmlbars and am not sure if that's the issue. All the direct dependencies am using have been upgraded to their corresponding latest versions
├─┬ @ember/test-helpers@2.6.0 │ └── ember-cli-htmlbars@5.7.2 ├─┬ @html-next/vertical-collection@2.1.0 │ └── ember-cli-htmlbars@3.1.0 ├─┬ ember-cli-clipboard@0.16.0 │ └── ember-cli-htmlbars@5.7.2 ├── ember-cli-htmlbars@6.0.1 ├─┬ ember-cli-nouislider@1.2.1 │ └── ember-cli-htmlbars@4.5.0 ├─┬ ember-concurrency@2.2.0 │ └── ember-cli-htmlbars@5.7.2 ├─┬ ember-css-transitions@2.1.1 │ └── ember-cli-htmlbars@5.7.2 ├─┬ ember-keyboard@6.0.4 │ └── ember-cli-htmlbars@5.7.2 ├─┬ ember-math-helpers@2.18.0 │ └── ember-cli-htmlbars@6.0.1 deduped ├─┬ ember-moment@9.0.1 │ └── ember-cli-htmlbars@5.7.2 ├─┬ ember-notify@6.0.2 │ └── ember-cli-htmlbars@5.7.2 ├─┬ ember-power-calendar@0.16.5 │ ├─┬ ember-assign-helper@0.3.0 │ │ └── ember-cli-htmlbars@4.5.0 │ ├── ember-cli-htmlbars@4.5.0 │ └─┬ ember-element-helper@0.5.5 │ └── ember-cli-htmlbars@5.7.2 ├─┬ ember-power-select@5.0.3 │ ├─┬ ember-assign-helper@0.4.0 │ │ └── ember-cli-htmlbars@6.0.1 deduped │ ├─┬ ember-basic-dropdown@4.0.2 │ │ ├── ember-cli-htmlbars@6.0.1 deduped │ │ └─┬ ember-maybe-in-element@2.0.3 │ │ └── ember-cli-htmlbars@5.7.2 │ ├── ember-cli-htmlbars@6.0.1 deduped │ ├─┬ ember-concurrency-decorators@2.0.3 │ │ └── ember-cli-htmlbars@4.5.0 │ └─┬ ember-text-measurer@0.6.0 │ └── ember-cli-htmlbars@4.5.0 ├─┬ ember-tooltips@3.5.1 │ ├── ember-cli-htmlbars@5.7.2 │ └─┬ ember-in-element-polyfill@1.0.1 │ └── ember-cli-htmlbars@5.7.2 ├─┬ ember-truncate@3.0.0 │ ├── ember-cli-htmlbars@5.7.2 │ └─┬ ember-singularity-mixins@4.0.0 │ ├── ember-cli-htmlbars@5.7.2 │ └─┬ ember-singularity@2.0.0 │ └── ember-cli-htmlbars@5.7.2 ├─┬ ember-wormhole@0.6.0 │ └── ember-cli-htmlbars@5.7.2 └─┬ liquid-fire@0.33.1 └── ember-cli-htmlbars@5.7.2 @runspired mentioned this issue could be a result of requiring implicit-this, so I replaced all the code in the file with a simple 'hello world' and I still see it. PFA the error log for my latest build attempt. Please let me know if I can help in any way! error.dump.83a26557dc69a3bf29a2e16c64960d5e.log
@npendery I finally managed to figure out what was causing the ember 4 build to fail for me. Due to some reason, using ember-cp-validations library was breaking the code. Removing it and all related code helped the build to succeed. Need to go back and figure out how to get around the problem. Just wanted to give you a heads up in case you are using this library.
In general, you should start by identifying any dependencies who in turn depend on old versions of ember-cli-htmlbars (or its predecessors) and either upgrade your dependencies to versions which have newer dependencies, or go open PRs which do the upgrade on the dependencies' dependencies (DEPENDENCIEEEEES) to get them up to date. That may not fix it immediately, but it's likely to help.
@chriskrycho I did that too. I removed libraries and associated code where the htmlbars version was not > 5.x.x. That did not help. The ember-cp-validations library I pulled out does not have any dependency on ember-cli-htmlbars or ember-cli-template-lint. But removing that helped in the build. Am not sure why yet.
Great, thanks @JenLyndle! Ill look into why that helps too
To make sure that my other dependencies were not causing this, I created a brand new ember application and installed ember-cp-validations. I ran ember build then and got the following deprecation and error:
WARNING: [DEPRECATION] [DEPRECATION] Usage of the Ember Global is deprecated. You should import the Ember module or the specific API instead.
See https://deprecations.emberjs.com/v3.x/#toc_ember-global for details.
Usages of the Ember Global may be caused by an outdated ember-cli-babel dependency. The following steps may help:
In order to avoid repeatedly showing the same deprecation messages, no further deprecation messages will be shown for usages of the Ember Global until ember-cli-babel is upgraded to v7.26.6 or above.
To see all instances of this deprecation message, set the EMBER_GLOBAL_DEPRECATIONS
environment variable to "all", e.g. EMBER_GLOBAL_DEPRECATIONS=all ember test
.
Prior to v7.26.6, ember-cli-babel sometimes transpiled imports into the equivalent Ember Global API, potentially triggering this deprecation message indirectly, even when you did not observe these deprecated usages in your code.
The following outdated versions are found in your project:
Environment: development cleaning up... Template Compiler Error (TemplateCompiler) in ember-quickstart/templates/application.hbs
Cannot read properties of undefined (reading 'visitor')
Stack Trace and Error Report: /var/folders/7l/54hcgmcj5px90x_b3n2lkss00000gn/T/error.dump.230e7976d87f3c46c3e6cfa1b4b3edcb.log
@JenLyndle The issue with ember-cp-validations
is most likely due to the deprecation that was cleaned up in #19429 for disallowing legacy class-based AST plugins. It looks like @Turbo87 fixed this issue in qonto/ember-cp-validations#3, but that's a fork of the addon that doesn't appear to be published to NPM. The original addon hasn't been touched since April 2021.
I'm currently diagnosing an issue that cropped up with the recent ember-canary/ember-beta's (todays), it may not be a bug with Ember.js itself, but rather some other part of our default system that is now getting tripped up.
Stack Strace: