先说问题,在 chrome 、firefox 上完美运行,但在 safari 上运行报错:SyntaxError: Unexpected token '='. Expected an opening '(' before a method's parameter list.
safari 版本:13.x
# src/utils/helper.ts
export default new class Helpers {
public list: string[] = []; // 主要是这行导致的
}
npm create vite@latest safari-demo --template vue-ts
cd safari-demo
npm install
npm run dev
是什么原因导致的啊?是需要安装什么插件吗?有遇到相同问题的吗?
1
hua123s 2022-10-20 14:57:48 +08:00
这是什么奇怪的写法
export default new (class Helpers { public list: string[] = []; // 主要是这行导致的 })(); 这个意思? |
2
MrYELiex 2022-10-20 14:59:18 +08:00
报错都这么明显了 还想浏览器帮你改好吗
|
3
sunny1688 OP ts 翻译成 js 后其实就是
class Helpers { list = []; // safari 不支持这样的写法 } |
4
happyeveryday 2022-10-20 15:05:03 +08:00
vitejs 我们只打 dev 模式本地开发,确实速度提升巨大
测试预发生产环境都是 webpack 打,稳稳地 |
5
Rache1 2022-10-20 15:07:31 +08:00
Safari 的版本太低了,还不支持这个语法,可以用 babel 处理一下
javascript - SAFARI : Unexpected token '='. Expected an opening '(' before a method's parameter list - Stack Overflow https://stackoverflow.com/questions/60026651/safari-unexpected-token-expected-an-opening-before-a-methods-paramet |
6
hua123s 2022-10-20 15:08:26 +08:00
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Public_class_fields
Safari 14.1 才支持 public class field ,编译成 ES5 咯。 |
7
hua123s 2022-10-20 15:09:04 +08:00
|
8
lenonrade 2022-10-20 15:09:46 +08:00
safari 不支持 ES6 的 Class static initialization blocks, ES6 的类归根到底还是 JavaScript 的原型继承,不要忘了 javascript 的本质.
参考文献: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes/Class_static_initialization_blocks |
9
sunny1688 OP |
10
sunny1688 OP 开发期间看到浏览器是直接请求 /xxx/xxx.ts ,而不是编译后的 js
|
11
wunonglin 2022-10-20 15:43:26 +08:00
|