问题出现:我调用了一个叫做gdb-js的module,而该module需要使用regeneratorRuntime。
我当时按照网上说的安装了@babel/plugin-transform-runtime,配置了babel.config.js。但是没有解决。
当时我感到很奇怪的是,我自己在文件中使用ES6语法可以正常转义,但是运行项目就是报错,于是我考虑了是否是babel没有转义node_module中的文件,于是我找到了这篇文章:
https://www.jianshu.com/p/4bd68d2b07b3
关键点在于:
vue-cli3.x的项目初始化时会引入一个插件,名为@vue/cli-plugin-babel @vue/cli-plugin-babel:默认已引入 默认使用 Babel 7 + babel-loader + @vue/babel-preset-app,也就是无需再单独引入babel-loader等转换插件了
因此使用vue3的,不要看网上那些攻略了,不是那个原因。
此时我发现按照vue-cli的说法,确实可能没有转义mode_module中的包,需要配置:https://cli.vuejs.org/zh/guide/browser-compatibility.html#browserslist
如果该依赖基于一个目标环境不支持的 ES 版本撰写: 将其添加到vue.config.js 中的 transpileDependencies 选项。这会为该依赖同时开启语法转换和根据使用情况检测 polyfill。
让我崩溃的是我的transpileDependencies已经设置为true了(默认建项目的时候设置的是true),意味着应该会转义所有的node_module中的包。
后来我看了下出问题的地方,直接使用了regeneratorRuntime,此时我终于考虑到应该全局注册regeneratorRuntime。然后我尝试在main.ts中进行注册,结果还是不行(一开始也这样试过),最后在preload.ts中注册成功。
解决方法:在preload.ts中加入:
import 'core-js/stable';
import 'regenerator-runtime/runtime';
应该是哪里调了这个包,就在哪里加一下,我是在preload中调的。如果不确定的话,可以用console.log(regeneratorRuntime)看下是否存在。
|