Vue3.x的版本中build后dist文件中出现legacy的js文件问题

yizhihongxing

Vue 3.x的版本中build后dist文件中出现legacy的js文件问题,是由于在Vue 3.x的版本中,开发团队加入了 Webpack 5 的新特性—— 模块还原 /esModule,这些变化导致了一些旧版浏览器中无法兼容这些新特性,因此需要生成一个legacy版本的js文件来兼容这些浏览器。

以下是如何解决这个问题的完整攻略:

1.修改 package.json 的 build 命令

在 package.json 的 build 命令中,使用 --target 属性来指定编译的浏览器版本,例如以下代码:

"build": "vue-cli-service build --target 'es5' --modern"

在这个命令中,我们将编译目标设置为 ES5(旧版浏览器),并使用了 --modern 来同时生成一个现代(支持较新浏览器)和一个旧版兼容文件。当命令完成时,dist 文件夹中应该会出现两个文件夹,一个名为 legacy,另一个名为 modern。

2.修改 vue.config.js 文件

如果你已经使用了 vue-cli 4.x 及更高版本,则可以通过 vue.config.js 文件来配置目标浏览器版本并生成对应的legacy文件。在vue.config.js文件中添加以下代码:

module.exports = {
  productionSourceMap: false,
  configureWebpack: {
    output: {
      filename: '[name].[hash:8].js',
      chunkFilename: '[name].[hash:8].js',
    },
  },
  chainWebpack: (config) => {
    config.when(process.env.NODE_ENV === 'production', (config) => {
      config.optimization.delete('splitChunks');
      config.output.filename('[name].[hash:8].js').end();
      config.output.chunkFilename('[name].[hash:8].js').end();
      config.module.rule('vue').use('vue-loader').tap((options) => {
        options.compilerOptions.whitespace = 'preserve';
        return options;
      });
      config.module.rule('images').test(/\.(png|jpe?g|gif|webp|svg)(\?.*)?$/).use('url-loader').loader('url-loader').end();
    });

    config.when(process.env.NODE_ENV === 'development', (config) => {
      config.optimization.splitChunks(false);
    });

    config.when(process.env.NODE_ENV === 'production' && process.env.VUE_APP_MODE === 'legacy', (config) => {
      config.entry('app').clear().add('./src/main-legacy.js');
      config.performance.hints(false);
      config.output.filename('js/[name].[hash:8].legacy.js').end();
      config.output.chunkFilename('js/[name].[hash:8].legacy.js').end();
      config.module.rule('vue').use('vue-loader').tap((options) => {
        options.compilerOptions.modules = [
          {
            preTransformNode(astEl) {
              if (process.env.NODE_ENV === 'production') {
                if (options.functional) {
                  astEl.functional = true;
                  const { props } = astEl;
                  if (props) {
                    props.forEach((prop) => {
                      if (prop.type === 1) {
                        prop.value = `__$props[\'${prop.name}\']`;
                        delete prop.name;
                      }
                    });
                  }
                }
              }
              return astEl;
            },
          },
        ];
        return options;
      });
    });
  },
};

该代码将在有需要时,按照指定的方式对目标浏览器版本进行自定义构建,并生成对应的旧版兼容文件。

在以上代码中,我们通过添加 process.env.VUE_APP_MODE 环境变量来指示使用指定的构建模式生成旧版兼容文件。

总结

在Vue 3.x的版本中build后dist文件中出现legacy的js文件问题,可以通过两种方法来解决这个问题。第一个方法是在 package.json 的 build 命令中添加 --target 属性来指定编译目标,并同时生成现代和旧版兼容文件。第二个方法是在 vue.config.js 文件中自定义构建并生成旧版兼容文件。无论使用哪种方法,你都可以有效地解决这个问题,确保你的Vue应用程序能够在所有浏览器上正确运行。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Vue3.x的版本中build后dist文件中出现legacy的js文件问题 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • Vue from-validate 表单验证的示例代码

    下面是Vue表单验证的示例代码攻略。 1. 安装依赖和引入相关组件 首先需要安装依赖包,包括vee-validate和vue-i18n等。这里以npm为例,执行以下命令: npm install vee-validate@next vue-i18n 然后在Vue项目入口文件中引入依赖: import { createApp } from ‘vue’; imp…

    Vue 2023年5月28日
    00
  • Vue中的vue-resource示例详解

    Vue中的vue-resource示例详解 什么是vue-resource vue-resource是一个Vue.js插件,用于通过XHR实用RESTful API。 安装和引用 安装: npm install vue-resource –save 引用: import VueResource from ‘vue-resource’ Vue.use(Vue…

    Vue 2023年5月28日
    00
  • vue2.0开发实践总结之入门篇

    Vue2.0开发实践总结之入门篇 介绍 本文主要介绍Vue2.0入门开发实践总结,旨在帮助前端开发者快速上手Vue2.0。文章扼要概括了Vue2.0的基本特性和应用场景,让读者了解Vue2.0的优点和使用价值,同时,结合具体的应用实例进行讲解,方便读者理解掌握Vue2.0的开发流程。 基本特性 Vue2.0是一款轻量、快速、易用的MVVM前端框架,具有以下几…

    Vue 2023年5月27日
    00
  • 详解mpvue开发微信小程序基础知识

    详解mpvue开发微信小程序基础知识 什么是mpvue mpvue是一个基于Vue.js的小程序开发框架,可以让我们使用Vue.js的语法开发小程序,同时也能兼顾小程序的一些特殊需求。 在使用mpvue进行小程序开发时,我们可以享受到Vue.js带来的诸多便利,例如组件化、路由、数据绑定等等。 同时,mpvue也将小程序的一些独特特性进行了支持,例如原生AP…

    Vue 2023年5月27日
    00
  • 简易Vue评论框架的实现(父组件的实现)

    下面我来详细讲解一下“简易Vue评论框架的实现(父组件的实现)”: 简述 本文主要介绍如何使用Vue.js实现一个简单的评论框架,涉及组件通信、事件触发等相关知识点。本文将从父组件的实现开始,带你逐步实现一个完整的评论框架。 父组件的实现 创建父组件 首先,我们需要创建一个父组件,用于渲染整个评论区。可以先创建一个Comment.vue文件,并定义一个简单的…

    Vue 2023年5月27日
    00
  • 浅谈Vue-cli 命令行工具分析

    下面我将详细讲解 “浅谈Vue-cli 命令行工具分析” 的完整攻略。 什么是Vue-cli ? Vue-cli 是一个官方提供的基于 Vue.js 快速创建项目的命令行工具,它提供了一整套前端工具体系,可以快速搭建起一个前端开发和生产环境所需要的开发框架。 Vue-cli 常用于开发 Vue.js 的单页面应用(SPA)和 webpack 多页面应用(MP…

    Vue 2023年5月28日
    00
  • Vue父子组件之间事件通信示例解析

    Vue父子组件之间事件通信示例解析 在Vue组件化开发中,父子组件之间需要进行信息传递和交互。Vue提供了通过事件(Event)进行父子组件之间通信的方法。本文将详细探讨Vue父子组件之间事件通信的原理和实现。 父组件向子组件传递数据 可以通过在父组件模板中,使用子组件标签的属性将数据传递给子组件,然后在子组件中通过“props”属性接受父组件传递的数据。此…

    Vue 2023年5月29日
    00
  • vue2.x 对象劫持的原理实现

    Vue.js 通过 Object.defineProperty() 函数,对对象的属性进行劫持,实现了数据双向绑定的功能。 具体的实现过程如下: Vue.js 给每个组件对象(包含 data 属性)都创建了一个 Observer 对象,并将 data 属性的值递归地遍历,使用 Object.defineProperty() 函数将 data 属性的每个属性都…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部