vue.config文件常用配置详解

3283次阅读 254人点赞 作者: WuBin 发布时间: 2021-06-23 16:38:37
扫码到手机查看

配置alias引用

function resolve(dir) {
    return path.join(__dirname, dir)
}
module.exports = {
    chainWebpack(config) {
        config.resolve.alias
            .set('components', resolve('src/components'))
            .set('common', resolve('src/common'))
            .set('api', resolve('src/api'))
    },
}

这样在组件中引用的时候,就不用写繁琐的路径了:

import Xx from 'components/xx/xx';
import Xx from 'common/xx/xx';
import Xx from 'api/xx';

在书写CSS时候,引用的方法(注意在路径前面有个波浪线~

 @import "~common/less/variable.less";

这一点在vue3中得到了进一步优化,甚至在vue.config.js文件中不用配置,直接使用“@”去代表根路径/src(这个是配置的 webpack 的 alias,vue-cli 内部对 webpack 的封装做的。)。

import Header from '@/components/header/header'

本地模拟数据并获取查询参数

1、首先将模拟的data.json文件放在文件的根目录下;

2、配置config文件进行读取

// 配置本地模拟服务器文件
const webpack = require('webpack');
const path = require('path');
// 引入data.json文件
const appData_one = require('./data');
const appData_error = require('./data_error');

module.exports = {
    devServer: {
        before(app) {
            // 配置好后访问localhost:8080/api/?id=1 即可得到appData_one中的数据
            app.get('/api/', function (req, res) {
                // req.query.id就是url中的查询字符串
                // 注意获取的查询字符串是字符串类型 使用需要转化为整形!
                switch (parseInt(req.query.id)) {
                    case 1:
                        res.json(appData_one);
                        break;
                    default:
                        res.json(appData_error)
                }
            });
        }
    }
}

req.query可以获得/api/这个url上的查询字符串,如/api/?id=1&age=18,那么req.query = { id: 1, age: 18 }

文件打包路径

module.exports = {
    // 打包文件的前缀路径
    publicPath: '',
    // 设置false后,上线的项目就看不到源代码了,只能看到压缩代码
    productionSourceMap: false,
}

publicPath如果不设置为空,那么打包后的项目,其中js的引用路径如下:

// publicPath未设置,使用默认值
<script src="./vendor.js"></script>
// publicPath: ''
<script src="vendor.js"></script>
// publicPath: 'v1'
<script src="v1/vendor.js"></script>

一般的直接设置为空即可。这样打包后的资源路径可以被正常访问到。

在最新的vue3中,如下配置:

module.exports = defineConfig({
  transpileDependencies: true,
  publicPath: '',            // 为空,那么打包后的js\css等前面是空,比如js/xxx
  outputDir: 'dist',         // 打包后的程序都在哪个文件夹下
  indexPath: 'app.html'  // 打包后的运行的主页=原来的index.html
});

修改打包后的主页地址,使用indexPath:'app.html' 指定即可

修改打包后的主页index.html 改为default.html

indexPath: 'default.html',

打包的JS和CSS取消缓存后缀

通常vue-cli打包后的js文件名如:app.190642b6.js

但是我们有时候并不需要缓存的后缀,只需要app.js,代码配置如下:

module.exports = {
    // 设置JS打包后的路径以及文件名
    configureWebpack: {
        // 输出重构  打包编译后的 文件名称 本例是取消多余的后缀只保留文件名
        output: {
            filename: `js/[name].js`,
            chunkFilename: `js/[name].js`
        }
    },
    // 设计CSS打包后的路径和文件名,需要后缀,则filename: `css/[name].[chunkhash].css`,
    css: {
        // 将组件内的 CSS 提取到一个单独的 CSS 文件 (只用在生产环境中)
        // 也可以是一个传递给 `extract-text-webpack-plugin` 的选项对象
        // 修改打包后css文件名
        // extract: true,
        extract:{
            filename: `css/[name].css`,
            chunkFilename: `css/[name].css`
        },

        // 是否开启 CSS source map?
        sourceMap: false,

        // 为预处理器的 loader 传递自定义选项。比如传递给
        // sass-loader 时,使用 `{ sass: { ... } }`。
        loaderOptions: {},
        // requireModuleExtension: false
    }
}

这样再打包后的文件名,就不会有缓存后缀了。

使用代理请求数据


module.exports = {
    devServer: {
        proxy: {
            // 所有 /api请求的路由会走这个代理
            '/api': {
                // 目标服务器地址,也就是接口服务器的真实地址
                target: 'https://ssl.qdxin.cn/wechat/api/m.qdxin.cn/api',
                /* 
                跨域时一般都设置该值 为 true
                开启代理:在本地会创建一个虚拟服务端,然后发送请求的数据,并同时接收请求的数据,
                这样服务端和服务端进行数据的交互就不会有跨域问题 
                */
                changeOrigin: true,
                // 重写接口路由
                pathRewrite: {
                    // /api_index.json 被重写为 /api/index
                    // 这样处理后,最终得到的接口路径为: http://localhost:8080/api/index
                    // 然后node服务端实际请求的地址https://ssl.qdxin.cn/.../api/api_index.json
                    '^/api/index': 'api_index.json',
                    '^/api/list/api_more_69': 'api_more_69.json',
                    '^/api/detail/2/18000': 'detail/2/18000',
                }
            }
        }
    },
}

当然代理请求数据非必要还是不要使用node,一劳永逸的情况还是使用PHP等服务端语言写更好一些。这个仅仅作为备选的方案。

sass全局配置

module.exports = {
  css: {
    loaderOptions: {
      sass: {
        // 全局引入变量和Mixin additionalData允许全局引入scss文件,
        // 全局引入后就可以直接用 无需每个组件都import了
        // 因为这是最新的特性,所以node-sass:^5.0与sass-loader:^10.1必须升级到最新版否则会报错
        additionalData: `
          @import "@/assets/scss/variable.scss";
          @import "@/assets/scss/mixin.scss";
        `
      }
    }
  }
}

这样配置后,就无需在每个组件中都引用mixin.scss和variable.scss文件了。比如

// 以前 只有在每个组件import后才能使用,否则会报错
<style>
  @import "~common/less/variable.scss";
  @import "~common/less/mixin.scss";
  div{color: @blue;}

// 配置之后 无需引用,直接在<style>中使用即可
div{color: @blue;}

具体到less以及stylus中是否也有此功能配置,待我验证后补充哈~

点赞 支持一下 觉得不错?客官您就稍微鼓励一下吧!
关键词:vue.config
推荐阅读
  • uniapp实现被浏览器唤起的功能

    当用户打开h5链接时候,点击打开app若用户在已经安装过app的情况下直接打开app,若未安装过跳到应用市场下载安装这个功能在实现上主要分为两种场景,从普通浏览器唤醒以及从微信唤醒。

    9603次阅读 623人点赞 发布时间: 2022-12-14 16:34:53 立即查看
  • Vue

    盘点Vue2和Vue3的10种组件通信方式

    Vue中组件通信方式有很多,其中Vue2和Vue3实现起来也会有很多差异;本文将通过选项式API组合式API以及setup三种不同实现方式全面介绍Vue2和Vue3的组件通信方式。

    4297次阅读 317人点赞 发布时间: 2022-08-19 09:40:16 立即查看
  • JS

    几个高级前端常用的API

    推荐4个前端开发中常用的高端API,分别是MutationObserver、IntersectionObserver、getComputedstyle、getBoundingClientRect、requ...

    14452次阅读 948人点赞 发布时间: 2021-11-11 09:39:54 立即查看
  • PHP

    【正则】一些常用的正则表达式总结

    在日常开发中,正则表达式是非常有用的,正则表达式在每个语言中都是可以使用的,他就跟JSON一样,是通用的。了解一些常用的正则表达式,能大大提高你的工作效率。

    13497次阅读 491人点赞 发布时间: 2021-10-09 15:58:58 立即查看
  • 【中文】免费可商用字体下载与考证

    65款免费、可商用、无任何限制中文字体打包下载,这些字体都是经过长期验证,经得住市场考验的,让您规避被无良厂商起诉的风险。

    12015次阅读 963人点赞 发布时间: 2021-07-05 15:28:45 立即查看
  • Vue

    Vue3开发一个v-loading的自定义指令

    在vue3中实现一个自定义的指令,有助于我们简化开发,简化复用,通过一个指令的调用即可实现一些可高度复用的交互。

    16376次阅读 1307人点赞 发布时间: 2021-07-02 15:58:35 立即查看
  • JS

    关于手机上滚动穿透问题的解决

    当页面出现浮层的时候,滑动浮层的内容,正常情况下预期应该是浮层下边的内容不会滚动;然而事实并非如此。在PC上使用css即可解决,但是在手机端,情况就变的比较复杂,就需要禁止触摸事件才可以。

    15187次阅读 1234人点赞 发布时间: 2021-05-31 09:25:50 立即查看
  • Vue

    Vue+html2canvas截图空白的问题

    在使用vue做信网单页专题时,有海报生成的功能,这里推荐2个插件:一个是html2canvas,构造好DOM然后转canvas进行截图;另外使用vue-canvas-poster(这个截止到2021年3月...

    29849次阅读 2347人点赞 发布时间: 2021-03-02 09:04:51 立即查看
  • Vue

    vue-router4过度动画无效解决方案

    在初次使用vue3+vue-router4时候,先后遇到了过度动画transition进入和退出分别无效的情况,搜遍百度没没找到合适解决方法,包括vue-route4有一些API都进行了变化,以前的一些操...

    25909次阅读 1994人点赞 发布时间: 2021-02-23 13:37:20 立即查看
交流 收藏 目录