vue项目中vue.config.js中配置webpack详解

前言:

vue-cli3以前的版本中把webpack的配置都写在config文件中,可以vue-cli3以上的版本中没有了config目录,可以将配置webpack的文件写在vue.config.js文件里面。

vue.config.js 是一个可选的配置文件,如果项目的 (和 package.json 同级的) 根目录中存在这个文件,那么它会被 @vue/cli-service 自动加载。你也可以使用 package.json 中的 vue 字段,但是注意这种写法需要你严格遵照 JSON 的格式来写。

一、vue.config.js中的基本配置

1、导出:

// vue.config.js

/**
 * @type {import('@vue/cli-service').ProjectOptions}
 */
module.exports = {
  // 选项...
}

或者也可以用帮手函数defineConfig

// vue.config.js
const { defineConfig } = require('@vue/cli-service')

module.exports = defineConfig({
  // 选项
})

2、publicPath部署应用包的基本url

默认/,可以设置为相对路径./。

用法和 webpack 本身的 output.publicPath 一致,但是 Vue CLI 在一些其他地方也需要用到这个值,所以请始终使用 publicPath 而不要直接修改 webpack 的 output.publicPath

let developmentPath='./';//开发环境-npm run serve时引用文件路径
let productionPath='./';//生产环境-npm run build打包后引用文件路径
module.exports = {
    publicPath: process.env.NODE_ENV === 'production' ? productionPath: developmentPath, // 基本路径-引用文件的路
}

3、 outputDir 输出生产环境构建文件的目录

当运行 vue-cli-service build 时生成的生产环境构建文件的目录。

请始终使用 outputDir 而不要修改 webpack 的 output.path

outputDir: "dist/html",

4、assetsDir 打包后生成的静态资源目录

放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。

从生成的资源覆写 filename 或 chunkFilename 时,assetsDir 会被忽略。

assetsDir: 'static',

 5、indexPath

指定生成的 index.html 的输出路径 (相对于 outputDir)。也可以是一个绝对路径。

6、lintOnSave

是否在保存的时候通过eslint-loader检查

如果你想要在生产构建时禁用 eslint-loader,你可以用如下配置:

// vue.config.js
module.exports = {
  lintOnSave: process.env.NODE_ENV !== 'production'
}

7、productionSourceMap

如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。默认是true

productionSourceMap: false,

8、 devServer

通过devServer.proxy 选项配置,可解决跨域问题

devServer: {
    index: '/index.html',   //默认打开文件
    open: true,             //自动打开浏览器
    host: 'localhost',      //默认打开域名
    port: 8080,             //默认打开端口号
    https: false,           //开启关闭https请求
    hotOnly: false,         //热更
    overlay: {
      warnings: false,
      errors: true,
    },
    proxy: {
      // 配置跨域
      '/api': {
        target: 'http://192.168.99.99:8080', //代理地址,这里设置的地址会代替axios中设置的baseURL
        changeOrigin: true,// 如果接口跨域,需要进行这个参数配置
        pathRewrite: {                //pathRewrite方法重写url
          '^/api': '/',
        },
        // secure: false, // 如果要验证SSL证书 设置为true
        // ws: true, // 如果您想代理websocket
      },
    },
    // mock 使用需要打开
    // before: require('./mock/mock-server.js')
  },

 二、vue.config.js中配置webpack

1、configureWebpack

调整 webpack 配置最简单的方式就是在 vue.config.js 中的 configureWebpack 选项提供一个对象:

该对象将会被 webpack-merge 合并入最终的 webpack 配置。

configureWebpack: {
    // 以便在webpack的名称字段中提供应用程序的标题,以便
    //可以在index.html中访问它以注入正确的标题。
    name: name,
    resolve: {
      alias: {
        "@": resolve("src"),
      },
    },
  },

如果你需要基于环境有条件地配置行为,或者想要直接修改配置,那就换成一个函数 (该函数会在环境变量被设置之后懒执行)。该方法的第一个参数会收到已经解析好的配置。在函数内,你可以直接修改配置,或者返回一个将会被合并的对象:

  configureWebpack: config => {
    if (process.env.NODE_ENV === 'production') {
      // 为生产环境修改配置...
    } else {
      // 为开发环境修改配置...
    }
  }

2、chainWebpack链式操作 (高级)

Vue CLI 内部的 webpack 配置是通过 webpack-chain 维护的。这个库提供了一个 webpack 原始配置的上层抽象,使其可以定义具名的 loader 规则和具名插件,并有机会在后期进入这些规则并对它们的选项进行修改。

  chainWebpack(config) {
    // it can improve the speed of the first screen, it is recommended to turn on preload
    config.plugin("preload").tap(() => [
      {
        rel: "preload",
        // to ignore runtime.js
        // https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/cli-service/lib/config/app.js#L171
        fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
        include: "initial",
      },
    ]);

    // when there are many pages, it will cause too many meaningless requests
    config.plugins.delete("prefetch");

    // set svg-sprite-loader
    config.module.rule("svg").exclude.add(resolve("src/icons")).end();
    config.module
      .rule("icons")
      .test(/\.svg$/)
      .include.add(resolve("src/icons"))
      .end()
      .use("svg-sprite-loader")
      .loader("svg-sprite-loader")
      .options({
        symbolId: "icon-[name]",
      })
      .end();

    // set preserveWhitespace
    config.module
      .rule("vue")
      .use("vue-loader")
      .loader("vue-loader")
      .tap((options) => {
        options.compilerOptions.preserveWhitespace = true;
        return options;
      })
      .end();

    config.when(process.env.NODE_ENV == "development", (config) => {
      config
        .plugin("ScriptExtHtmlWebpackPlugin")
        .after("html")
        .use("script-ext-html-webpack-plugin", [
          {
            // `runtime` must same as runtimeChunk name. default is `runtime`
            inline: /runtime\..*\.js$/,
          },
        ])
        .end();
      config.optimization.splitChunks({
        chunks: "all",
        cacheGroups: {
          libs: {
            name: "chunk-libs",
            test: /[\\/]node_modules[\\/]/,
            priority: 10,
            chunks: "initial", // only package third parties that are initially dependent
          },
          elementUI: {
            name: "chunk-elementUI", // split elementUI into a single package
            priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
            test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm
          },
          commons: {
            name: "chunk-commons",
            test: resolve("src/components"), // can customize your rules
            minChunks: 3, //  minimum common number
            priority: 5,
            reuseExistingChunk: true,
          },
        },
      });
      // https:// webpack.js.org/configuration/optimization/#optimizationruntimechunk
      config.optimization.runtimeChunk("single");
    });
  },
注意:

chainWebpack通过链式编程的形式,来修改默认的webpack配置
configureWebpack通过操作对象的形式,来修改默认的webpack配置
如果对一个loader或plugin修改的配置如果是一项的话推荐 chainWebpack、如果是多项的话用configureWebpack直接覆写

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用和引用[2]提供了关于vue.config.js配置的详细介绍和示例代码。vue.config.js是一个用于配置Vue项目的文件,主要用于修改Webpack配置和其他一些项目设置。在这个文件,你可以设置诸如webpack配置、打包输出路径、静态资源路径、是否生成源映射等等。为了更好地理解vue.config.js配置,我会分步骤来介绍一些常用的配置选项。 首先,我们可以使用configureWebpack选项来修改Webpack配置。比如,要在生产环境修改配置,可以通过设置config.mode为'production'来指定模式。而config.performance则可以用来设置打包文件的大小限制。引用的代码示例展示了如何进行这样的配置。 其次,我们还可以使用chainWebpack选项来链式操作Webpack配置。在这里,你可以通过config.resolve.alias来设置路径别名,以方便你在项目引用模块。比如,可以使用.set('@', resolve('src'))来将'@'设置为指向'src'目录的别名。 另外,如果你想对打包后的文件进行压缩,你可以使用CompressionWebpackPlugin插件。引用的代码示例展示了如何在vue.config.js引用该插件,并使用它进行压缩。 综上所述,vue.config.js提供了丰富的配置选项,可以让你对Vue项目进行灵活的配置和定制。你可以根据项目需求来设置不同的选项,以满足你的开发和生产需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值