Optional chaining isn't working on my Vue.js (v2) project on Node 14.17.
const adventurer = {
name: 'Alice',
cat: {
name: 'Dinah'
}
};
const dogName = adventurer.dog?.name;
console.log(dogName);
// expected output: undefined
console.log(adventurer.someNonExistentMethod?.());
// expected output: undefined
I get the following error:
ERROR Failed to compile with 1 error 11:04:50
error in ./src/components/Thing.vue?vue&type=script&lang=js&
Module parse failed: Unexpected token (497:39)
File was processed with these loaders:
* ./node_modules/cache-loader/dist/cjs.js
* ./node_modules/vue-loader/lib/index.js
You may need an additional loader to handle the result of these loaders.
| }
| };
> const dogName = adventurer.dog?.name;
| console.log(dogName);
| // expected output: undefined
@ ./src/components/Thing.vue
@ ./src/components/xx-thing.vue?vue&type=script&lang=js&
@ ./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/views/Home.vue?vue&type=script&lang=js&
@ ./src/views/Home.vue
@ ./src/router.js
@ ./src/main.js
@ multi (webpack)-dev-server/client?http://172.16.8.210:8080/sockjs-node (webpack)/hot/dev-server.js ./src/main.js
I'm having a hunch it may be related to one of the below. I've installed Babel 7 as well, but perhaps the project still uses 6, as the Babel module name has apparently changed. But I don't know how to check, or how to switch it to 7, and even if that could be done without breaking the Vue project -- and perhaps it has nothing to do with that..
node -v
v14.17.6
npm ls webpack
[email protected]
npm ls @babel/core
7.15.5 (=latest)
npm ls @vue/cli-plugin-babel
4.5.13 (=latest)
npm ls @babel/plugin-proposal-optional-chaining
7.14.5 (=latest)
vue info
Environment Info:
System:
OS: Windows 10 10.0.18363
CPU: (8) x64 Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz
Binaries:
Node: 14.17.6 - C:\Program Files\nodejs\node.EXE
Yarn: Not Found
npm: 6.14.15 - C:\Program Files\nodejs\npm.CMD
Browsers:
Chrome: 92.0.4515.131
Edge: Spartan (44.18362.1474.0)
npmPackages:
@vue/babel-helper-vue-jsx-merge-props: 1.2.1
@vue/babel-helper-vue-transform-on: 1.0.2
@vue/babel-plugin-jsx: 1.0.7
@vue/babel-plugin-transform-vue-jsx: 1.2.1
@vue/babel-preset-app: 4.5.13
@vue/babel-preset-jsx: 1.2.4
@vue/babel-sugar-composition-api-inject-h: 1.2.1
@vue/babel-sugar-composition-api-render-instance: 1.2.4
@vue/babel-sugar-functional-vue: 1.2.2
@vue/babel-sugar-inject-h: 1.2.2
@vue/babel-sugar-v-model: 1.2.3
@vue/babel-sugar-v-on: 1.2.3
@vue/cli-overlay: 3.12.1
@vue/cli-plugin-babel: ^4.5.13 => 4.5.13
@vue/cli-plugin-eslint: ^3.11.0 => 3.12.1
@vue/cli-plugin-pwa: ^4.2.3 => 4.5.13
@vue/cli-service: ^3.11.0 => 3.12.1
@vue/cli-shared-utils: 3.12.1 (4.5.13)
@vue/cli-upgrade: ^3.12.1 => 3.12.1
@vue/component-compiler-utils: 3.2.2
@vue/preload-webpack-plugin: 1.1.2
@vue/web-component-wrapper: 1.3.0
eslint-plugin-vue: ^7.4.0 => 7.17.0 (4.7.1)
vue: ^2.6.10 => 2.6.14
vue-cli-plugin-vuetify: ^0.6.3 => 0.6.3
vue-eslint-parser: 7.11.0 (2.0.3)
vue-force-next-tick: ^1.1.0 => 1.1.0
vue-head: ^2.2.0 => 2.2.0
vue-hot-reload-api: 2.3.4
vue-loader: 15.9.8
vue-meta: ^2.3.2 => 2.4.0
vue-router: ^3.0.3 => 3.5.2
vue-sse: ^1.0.2 => 1.1.1
vue-style-loader: 4.1.3
vue-template-compiler: ^2.6.10 => 2.6.14
vue-template-es2015-compiler: 1.9.1
vue-the-mask: 0.11.1
vuedraggable: 2.24.3
vuetify: ^2.5.8 => 2.5.8
vuetify-form-base: ^0.3.2 => 0.3.3
vuetify-loader: ^1.4.3 => 1.7.3
npmGlobalPackages:
@vue/cli: Not Found
I've also tried adding plugins: ["@babel/plugin-proposal-optional-chaining"], to babel.config.js
I've also tried to uninstall babel 6, but the npm uninstaller fails to actually uninstall it.
Could have a similar root cause, (unfortunately unresolved): Optional chaining not working in Node 14 LTS?