-
-
Notifications
You must be signed in to change notification settings - Fork 6.3k
Description
Version
4.5.0
Reproduction link
https://github.com/RobbinBaauw/vue-cli-thread-repro
Environment info
System:
OS: Linux 5.7 Pop!_OS 20.04 LTS
CPU: (8) x64 Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
Binaries:
Node: 14.5.0 - /opt/node/bin/node
Yarn: 1.22.4 - /opt/node/bin/yarn
npm: 6.14.5 - /opt/node/bin/npm
Browsers:
Chrome: 83.0.4103.116
Firefox: 78.0.2
npmPackages:
@vue/cli: ^4.5.0 => 4.5.0
@vue/cli-shared-utils: 4.5.0
@vue/cli-ui: 4.5.0
@vue/cli-ui-addon-webpack: 4.5.0
@vue/cli-ui-addon-widgets: 4.5.0
@vue/compiler-core: 3.0.0-rc.4
@vue/compiler-dom: 3.0.0-rc.4
@vue/compiler-sfc: 3.0.0-rc.4
@vue/compiler-ssr: 3.0.0-rc.4
@vue/reactivity: 3.0.0-rc.4
@vue/runtime-core: 3.0.0-rc.4
@vue/runtime-dom: 3.0.0-rc.4
@vue/shared: 3.0.0-rc.4
typescript: 3.9.7
vue: 3.0.0-rc.4 (2.6.11)
vue-cli-plugin-apollo: 0.21.3
vue-codemod: 0.0.4
npmGlobalPackages:
@vue/cli: 4.5.0
Steps to reproduce
Note that I made 2 changes w.r.t. a generated project (RobbinBaauw/vue-cli-thread-repro@7295f13):
- Added invalid typescript in
main.ts - Added
vue.config.jsand changedts-loaderwith anerrorFormatter. Setparalleltotrue.
Now build. You'll get an error:
error in ./src/main.ts
Module build failed (from ./node_modules/thread-loader/dist/cjs.js):
Thread Loader (Worker 0)
Cannot read property 'hooks' of undefined
...
If you change parallel to false, it'll give the custom typescript error. This is expected behavior.
What is expected?
Both parallel and non-parallel give this typescript custom error
What is actually happening?
If thread-loader is used (so for compiling Typescript or by using Babel), the config is passed to the threads in buffers (strings). If you use non-serializable objects in your vue.config.js (such as functions), these objects are removed when serializing to this string, and thus you get these "undefined" errors when using thread-loader (see webpack/thread-loader#89 (comment)).
I ran into this "bug" when providing a custom renderer in Vue. This repro however shows that any reference type (such as functions) doesn't work. I don't know how to solve this properly, but at least providing a clear heads up in the docs (for example on https://cli.vuejs.org/guide/webpack.html) would be nice.