修改vue+webpack run build的路径方法

下面是修改vue+webpack run build的路径方法的详细攻略。

1. 理解打包路径

在修改打包路径之前,我们首先需要理解打包路径的概念。在使用vue-cli构建项目时,我们可以通过执行npm run build命令来进行打包,打包后的文件默认会被生成到dist目录下。如果我们需要修改打包后文件的输出路径,那么就需要修改webpack的配置文件。

2. 修改webpack配置文件

vue-cli生成的项目模板默认使用的是webpack 4.x,因此我们需要修改webpack.prod.conf.js配置文件。

在该文件中,我们需要进行以下几个步骤:

2.1 修改output.path属性

我们可以通过修改output.path属性来指定打包后文件的输出路径。我们可以在webpack.prod.conf.js文件中找到以下代码:

output: {
    path: config.build.assetsRoot,
    filename: utils.assetsPath('js/[name].[chunkhash].js'),
    chunkFilename: utils.assetsPath('js/[id].[chunkhash].js')
}

这里的config.build.assetsRoot指的就是打包后文件的输出路径,我们可以将其修改为我们想要的路径,例如:path: path.resolve(__dirname, '../dist')

2.2 修改publicPath属性

修改output.path后,我们还需要修改output.publicPath属性。publicPath属性指定了项目中资源文件的引用路径,它会将生成的JS/CSS/图片等资源文件的前缀路径修改为我们指定的路径。

我们可以在webpack.prod.conf.js文件中找到以下代码:

output: {
    ...
    publicPath: config.build.assetsPublicPath
}

这里的config.build.assetsPublicPath指的是打包后静态资源文件的引用路径,我们可以将其修改为我们想要的路径。

2.3 示例说明

示例1:将打包后的文件输出到build目录下

// webpack.prod.conf.js

const path = require('path')
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')

const webpackConfig = merge(baseWebpackConfig, {
  mode: 'production',
  output: {
    path: path.resolve(__dirname, '../build'),
    filename: utils.assetsPath('js/[name].[chunkhash].js'),
    chunkFilename: utils.assetsPath('js/[id].[chunkhash].js'),
    publicPath: '/'
  },
  optimization: {
    minimizer: [
      new UglifyJsPlugin({
        uglifyOptions: {
          compress: {
            warnings: false
          }
        },
        sourceMap: config.build.productionSourceMap,
        parallel: true
      }),
      new OptimizeCSSPlugin({
        cssProcessorOptions: config.build.productionSourceMap
          ? { safe: true, map: { inline: false } }
          : { safe: true }
      })
    ]
  },
  plugins: [
    new webpack.DefinePlugin({
      'process.env': require('../config/prod.env')
    }),
    new MiniCssExtractPlugin({
      filename: utils.assetsPath('css/[name].[chunkhash].css'),
      chunkFilename: utils.assetsPath('css/[id].[chunkhash].css')
    })
  ]
})

module.exports = webpackConfig

在该示例中,我们将打包后的文件输出到了build目录下,并且将引用路径指定为了根路径/

示例2:将打包后的文件输出到build目录下的web目录

// webpack.prod.conf.js

const path = require('path')
const utils = require('./utils')
const webpack = require('webpack')
const config = require('../config')
const merge = require('webpack-merge')
const baseWebpackConfig = require('./webpack.base.conf')
const MiniCssExtractPlugin = require('mini-css-extract-plugin')
const OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')
const UglifyJsPlugin = require('uglifyjs-webpack-plugin')

const webpackConfig = merge(baseWebpackConfig, {
  mode: 'production',
  output: {
    path: path.resolve(__dirname, '../build/web'),
    filename: utils.assetsPath('js/[name].[chunkhash].js'),
    chunkFilename: utils.assetsPath('js/[id].[chunkhash].js'),
    publicPath: '/web/'
  },
  optimization: {
    minimizer: [
      new UglifyJsPlugin({
        uglifyOptions: {
          compress: {
            warnings: false
          }
        },
        sourceMap: config.build.productionSourceMap,
        parallel: true
      }),
      new OptimizeCSSPlugin({
        cssProcessorOptions: config.build.productionSourceMap
          ? { safe: true, map: { inline: false } }
          : { safe: true }
      })
    ]
  },
  plugins: [
    new webpack.DefinePlugin({
      'process.env': require('../config/prod.env')
    }),
    new MiniCssExtractPlugin({
      filename: utils.assetsPath('css/[name].[chunkhash].css'),
      chunkFilename: utils.assetsPath('css/[id].[chunkhash].css')
    })
  ]
})

module.exports = webpackConfig

在该示例中,我们将打包后的文件输出到了build/web目录下,并且将引用路径指定为了/web/

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:修改vue+webpack run build的路径方法 - Python技术站

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

相关文章

  • Vue简单实现原理详解

    Vue简单实现原理详解 Vue是一款流行的前端JavaScript框架,能够帮助我们更高效地开发Web应用程序。本文主要介绍Vue的简单实现原理,包括数据绑定、指令和组件等方面。 数据绑定原理 Vue的数据绑定是其最重要的特性之一,其实现原理是通过Vue的响应式系统来实现的。当我们使用Vue创建一个对象时,它会将指定的属性转变为响应式属性(objects)。…

    Vue 2023年5月27日
    00
  • vue实现前端保持筛选条件到url并进行同步参数设计

    Vue实现前端保持筛选条件到URL并进行同步参数设计的攻略主要分为以下几个步骤: 第一步:获取参数并解析 我们可以使用vue-router的query属性获取URL参数,然后解析成对象,方便我们进行筛选条件的操作。例如: // 获取URL参数 const query = this.$route.query // 解析参数成Object const filte…

    Vue 2023年5月27日
    00
  • Vue 2源码解读$mount函数原理

    下面就是“Vue 2源码解读$mount函数原理”的详细攻略。 什么是$mount函数 Vue 2中$mount函数是Vue实例的生命周期函数之一。当实例被创建之后,需要通过$mount方法将其挂载到某个元素上才能开始渲染。$mount函数会将模板编译为渲染函数,并且将渲染函数和虚拟DOM挂载到实例上。在挂载后,Vue实例就可以响应用户的交互事件,并且动态更…

    Vue 2023年5月27日
    00
  • vue导出html、word和pdf的实现代码

    针对“vue导出html、word和pdf的实现代码”的完整攻略,我将结合Vue.js自身的特性及常用的第三方库,从以下几个方面进行讲解: Html导出 Vue.js的文本渲染是非常方便的,在页面上展示的数据,我们只需要利用Vue.js提供的模板语法即可。所以当我们需要导出html时,也可以利用这个特性来实现。 步骤如下: 创建一个带有数据的vue实例。 n…

    Vue 2023年5月27日
    00
  • 详解Vue与element-ui整合方式

    下面是详解Vue和element-ui整合的完整攻略。 一、概念介绍 Vue.js是一款轻量级的渐进式JavaScript框架,而element-ui是基于Vue.js的一款UI组件库,我们可以使用Vue.js和element-ui来快速构建网站前端的用户界面。但是,如果没有好的整合方式,可能会造成重复工作和代码冗余等问题。因此,下面介绍如何将Vue.js和…

    Vue 2023年5月28日
    00
  • 详解VueJS 数据驱动和依赖追踪分析

    让我们来详细讲解一下VueJS数据驱动和依赖追踪。 什么是数据驱动 在VueJS中,数据驱动是指视图(DOM)是由数据(Data)来驱动的,即数据的变化引起视图的更新。这是通过VueJS中的观察者(Observer)实现的。 在VueJS中,观察者是被绑定到数据上的。当数据变化时,观察者会观察到变化,并通知视图进行更新。 什么是依赖追踪 在VueJS中,凡是…

    Vue 2023年5月27日
    00
  • Vue 实现v-for循环的时候更改 class的样式名称

    当我们在 Vue 中使用 v-for 指令进行循环渲染列表的时候,有时候可能需要根据不同的条件给不同的元素添加不同的样式名称。Vue 中实现这个功能的方法很简单,只需要在 v-bind:class 属性中绑定一个动态的对象即可。 具体的步骤如下: 在 v-for 循环中,使用 v-bind:class 绑定一个动态的对象。 <div v-for=&qu…

    Vue 2023年5月29日
    00
  • Vue/React子组件实例暴露方法(TypeScript)

    接下来我将为你详细讲解“Vue/React子组件实例暴露方法(TypeScript)”的完整攻略。 1. 为什么要暴露子组件实例方法? 在Vue/React组件开发中,父子之间的组件通信是很常见的一种情况。而在某些情况下,我们需要获取子组件的实例,以便使父组件调用子组件的方法或属性。这个时候就需要用到子组件实例的暴露方法。 2. 如何在Vue子组件中暴露实例…

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