相关文章推荐
宽容的橡皮擦  ·  VueJS使用splice()删除动态渲染组 ...·  1 月前    · 
不拘小节的柑橘  ·  Vue使用html2canvas与jspdf ...·  1 月前    · 
淡定的斑马  ·  以另一个用户身份运行Python脚本·  3 年前    · 
星星上的大熊猫  ·  responseText与responseX ...·  3 年前    · 
逆袭的葡萄酒  ·  Java使用JDBC连接Hive(新版本)A ...·  3 年前    · 
孤独的沙发  ·  人工打标实现交通画像_51CTO博客_数据人工打标·  3 年前    · 
Code  ›  浏览器兼容性 | Vue CLI
babel 浏览器兼容性 vue
https://cli.vuejs.org/zh/guide/browser-compatibility
瘦瘦的棒棒糖
2 年前
Vue CLI
指南
配置参考
  • 插件开发指南
  • UI 插件信息
  • UI 插件 API
  • UI 本地化
  • Babel
  • TypeScript
  • ESLint
  • PWA
  • Jest
  • Mocha
  • Cypress
  • Nightwatch
更新记录
  • English
  • 简体中文
  • Русский
GitHub
指南
配置参考
  • 插件开发指南
  • UI 插件信息
  • UI 插件 API
  • UI 本地化
  • Babel
  • TypeScript
  • ESLint
  • PWA
  • Jest
  • Mocha
  • Cypress
  • Nightwatch
更新记录
  • English
  • 简体中文
  • Русский
GitHub
  • 介绍
  • 安装
  • 基础

    • 创建一个项目
    • 插件和 Preset
    • CLI 服务
  • 开发

    • 浏览器兼容性
      • browserslist
      • Polyfill
        • useBuiltIns: 'usage'
        • 构建库或是 Web Component 时的 Polyfills
      • 现代模式
    • HTML 和静态资源
    • CSS 相关
    • webpack 相关
    • 模式和环境变量
    • 构建目标
    • 部署

⚠️ Vue CLI 现已处于维护模式!

现在官方推荐使用 create-vue 来创建基于 Vite 的新项目。 另外请参考 Vue 3 工具链指南 以了解最新的工具推荐。

浏览器兼容性 #

browserslist #

你会发现有 package.json 文件里的 browserslist 字段 (或一个单独的 .browserslistrc 文件),指定了项目的目标浏览器的范围。这个值会被 @babel/preset-env 和 Autoprefixer 用来确定需要转译的 JavaScript 特性和需要添加的 CSS 浏览器前缀。

现在查阅 这里 了解如何指定浏览器范围。

Polyfill #

useBuiltIns: 'usage' #

一个默认的 Vue CLI 项目会使用 @vue/babel-preset-app ,它通过 @babel/preset-env 和 browserslist 配置来决定项目需要的 polyfill。

默认情况下,它会把 useBuiltIns: 'usage' 传递给 @babel/preset-env ,这样它会根据源代码中出现的语言特性自动检测需要的 polyfill。这确保了最终包里 polyfill 数量的最小化。然而,这也意味着 如果其中一个依赖需要特殊的 polyfill,默认情况下 Babel 无法将其检测出来。

如果有依赖需要 polyfill,你有几种选择:

  1. 如果该依赖基于一个目标环境不支持的 ES 版本撰写: 将其添加到 vue.config.js 中的 transpileDependencies 选项。这会为该依赖同时开启语法转换和根据使用情况检测 polyfill。

  2. 如果该依赖交付了 ES5 代码并显式地列出了需要的 polyfill: 你可以使用 @vue/babel-preset-app 的 polyfills 选项预包含所需要的 polyfill。 注意 es.promise 将被默认包含,因为现在的库依赖 Promise 是非常普遍的。

    // babel.config.js
    module.exports = {
      presets: [
        ['@vue/app', {
          polyfills: [
            'es.promise',
            'es.symbol'
    

    提示

    我们推荐以这种方式添加 polyfill 而不是在源代码中直接导入它们,因为如果这里列出的 polyfill 在 browserslist 的目标中不需要,则它会被自动排除。

  3. 如果该依赖交付 ES5 代码,但使用了 ES6+ 特性且没有显式地列出需要的 polyfill (例如 Vuetify): 请使用 useBuiltIns: 'entry' 然后在入口文件添加 import 'core-js/stable'; import 'regenerator-runtime/runtime'; 。这会根据 browserslist 目标导入 所有 polyfill,这样你就不用再担心依赖的 polyfill 问题了,但是因为包含了一些没有用到的 polyfill 所以最终的包大小可能会增加。

更多细节可查阅 @babel/preset-env 文档 。

构建库或是 Web Component 时的 Polyfills #

当使用 Vue CLI 来 构建一个库或是 Web Component 时,推荐给 @vue/babel-preset-app 传入 useBuiltIns: false 选项。这能够确保你的库或是组件不包含不必要的 polyfills。通常来说,打包 polyfills 应当是最终使用你的库的应用的责任。

现代模式 #

有了 Babel 我们可以兼顾所有最新的 ES2015+ 语言特性,但也意味着我们需要交付转译和 polyfill 后的包以支持旧浏览器。这些转译后的包通常都比原生的 ES2015+ 代码会更冗长,运行更慢。现如今绝大多数现代浏览器都已经支持了原生的 ES2015,所以因为要支持更老的浏览器而为它们交付笨重的代码是一种浪费。

Vue CLI 提供了一个“现代模式”帮你解决这个问题。以如下命令为生产环境构建:

vue-cli-service build --modern
 
推荐文章
宽容的橡皮擦  ·  VueJS使用splice()删除动态渲染组件异常:点击删除总是删最后一项
1 月前
不拘小节的柑橘  ·  Vue使用html2canvas与jspdf实现长内容分页导出PDF-开发者社区-阿里云
1 月前
淡定的斑马  ·  以另一个用户身份运行Python脚本
3 年前
星星上的大熊猫  ·  responseText与responseXML_51CTO博客_responsetext
3 年前
逆袭的葡萄酒  ·  Java使用JDBC连接Hive(新版本)API封装 - 腾讯云开发者社区-腾讯云
3 年前
孤独的沙发  ·  人工打标实现交通画像_51CTO博客_数据人工打标
3 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号