export class UserService { private static _instance: UserService = new UserService() static getInstance() { return UserService._instance }}
使用vite打包后转成了
class _ { static _instance = new _;}
但是转化的 语法在老浏览器不支持(es6 不支持 static 声明类变量),请求有知道如何解决的吗?
我尝试了使用babel,但是不知道如何配置
Vue3已经放弃老版本IE了:
https://github.com/vuejs/rfcs/blob/master/active-rfcs/0038-vue3-ie11-support.md
https://babeljs.io/docs/en/learn/
不过可以试试这个:
https://juejin.cn/post/7114586736201580575
首先,让我们理解一下你遇到的问题。你使用 Vite、TypeScript 和 Vue 3 打包后的代码在老版本的浏览器中不支持,特别是 ES6 不支持的 static
声明类变量。
为了解决这个问题,你可以使用 Babel 来转换你的代码。Babel 是一个 JavaScript 编译器,它可以将 ES6+ 代码转换为向后兼容的 JavaScript 版本。
下面是如何配置 Babel 的步骤:
npm install --save-dev @babel/core @babel/preset-env @babel/preset-typescript
或者
yarn add --dev @babel/core @babel/preset-env @babel/preset-typescript
.babelrc
,并添加以下内容:{ "presets": [ [ "@babel/preset-env", { "targets": { "browsers": ["last 2 versions", "ie >= 11"] } } ], "@babel/preset-typescript" ]}
这将设置 Babel 转换目标为支持 IE11 以及最后两个浏览器的版本。
vite.config.js
或 vite.config.ts
)中,确保你的 build.rollupOptions
配置包含了 Babel 的相关配置。例如:import { defineConfig } from 'vite'// 如果你使用 TypeScript,还需要导入 tsconfig.json 文件中的compilerOptionsimport { compilerOptions } from './tsconfig.json'export default defineConfig({ build: { rollupOptions: { // 在这里添加 Babel 的配置 external: ['vue'], // 根据你的项目需要来设置 external 列表 output: { // 设置变量名前缀,避免与全局冲突 chunkFileNames: 'static/js/[name]-[hash].js', entryFileNames: 'static/js/[name]-[hash].js', assetFileNames: 'static/assets/[name]-[hash].[ext]' }, plugins: [ // 在这里添加 Babel 的插件和预设配置 // 例如:@babel/preset-env 和 @babel/preset-typescript 的配置文件路径等 ] } }})
.ts
)都被正确地转换为 JavaScript。在 Vite 中,TypeScript 会自动被转换,所以你只需要确保 Babel 可以正确地处理它们。如果你在 Babel 中没有正确配置 TypeScript,可能会遇到类型错误的问题。在 .babelrc
文件中添加 "@babel/preset-typescript" 可以解决这个问题。gRPC基于HTTP/2,浏览器广泛支持HTTP/2(假设)。因此,我觉得从浏览器使用gRPC应该没有问题。 然而,很明显有一个问题。协议grpc web是不同的,因为“由于浏览器限制”而存在。还有许多博客文章描述了为让gRPC从浏览器工作而部署的复杂技术堆栈。 我忽略了实际的问题——为什么gRPC不只是在浏览器上工作?
我正在做一个测试,Firefox如何编码字符。 但事实让我困惑。 超文本标记语言代码: xxx是一些汉字。这些字符必须编码成%xx等格式才能通过HTTP传输。 首先,我用UTF-8编码源文件。使用firefox打开html文件。img标签将发送一个请求,“xxx”字符由UTF8编码。 (用UTF8编码HTML源文件,字符集=UTF8,浏览器用UTF编码URL) 我把meta改成了
问题内容: 我指着一些窍门,发现了这一点。在以下代码中: 对象是。为什么这段代码没有抛出? 我知道这不是访问变量的正确方法,但问题在于。 问题答案: 如果要使用以下方法反汇编您的班级文件,请向当前答案中添加一些其他信息: 你会得到: 在这里,您可以看到该指令在第7行完成了对静态字段的访问。每当通过代码访问静态字段时,都会在程序文件中生成相应的指令。 指令具有特殊性,即它们不需要在调用它们之前就对要
问题内容: 另外,在网上可以找到许多创建静态变量的解决方案。(尽管我还没有看到我喜欢的一个。) 为什么Python不支持方法中的静态变量?这被认为是非Python的,还是与Python的语法有关? 编辑: 我专门询问了 为什么 进行设计决策,但我没有提供任何代码示例,因为我想避免解释来模拟静态变量。 问题答案: 忽略这一点的想法是,静态变量仅在以下两种情况下才有用:何时真正应该使用类以及何时真正应
问题内容: 为什么要编译Python脚本?您可以直接从.py文件运行它们,并且效果很好,那么在性能上有什么优势吗? 我还注意到,我的应用程序中的某些文件被编译为.pyc,而另一些则没有,为什么? 问题答案: 它被编译为字节码,可以更快,更快速地使用。 无法编译某些文件的原因是,每次运行脚本时都会重新编译与之一起调用的主脚本。所有导入的脚本将被编译并存储在磁盘上。 Ben Blank的 重要补充:
变量被编译器声明为const,导致无法编译