vue 4、项目整合与优化

使用alias简化路径

  • 在原声webpack配置中我们可以定义alias来简化路径
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    const path = require('path')

    const resolve = dir => {
    return path.join(__dirname, dir)
    }

    module.exports = {
    ...

    resolve: {
    alias: {
    '@': resolve('src'), // 定义 src 目录变量
    _lib: resolve('src/common'), // 定义 common 目录变量,
    _com: resolve('src/components'), // 定义 components 目录变量,
    _img: resolve('src/images'), // 定义 images 目录变量,
    _ser: resolve('src/services'), // 定义 services 目录变量,
    }
    },

    ...
    }
  • 在vue-cli 3.x中我们需要处理vue.config.js
  • chainWebpack
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    /* vue.config.js */
    module.exports = {
    ...

    chainWebpack: config => {
    config.resolve.alias
    .set('@', resolve('src'))
    .set('_lib', resolve('src/common'))
    .set('_com', resolve('src/components'))
    .set('_img', resolve('src/images'))
    .set('_ser', resolve('src/services'))
    },

    ...
    }
  • 需要注意的是对于在样式及html模版中引用路径的简写时,前面需要加上~,否则历经解析会失败
    1
    2
    3
    .img {
    background: (~_img/home.png);
    }

    开启Gzip压缩

  • compression-webpack-plugin开启Gzip压缩
  • 在vue.config.js中通过configureWebpack中返回一个对象来实现plugins的合并
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    /* vue.config.js */
    const isPro = process.env.NODE_ENV === 'production'

    module.exports = {
    ...

    configureWebpack: config => {
    if (isPro) {
    return {
    plugins: [
    new CompressionWebpackPlugin({
    // 目标文件名称。[path] 被替换为原始文件的路径和 [query] 查询
    filename: '[path].gz[query]',
    // 使用 gzip 压缩
    algorithm: 'gzip',
    // 处理与此正则相匹配的所有文件
    test: new RegExp(
    '\\.(js|css)$'
    ),
    // 只处理大于此大小的文件
    threshold: 10240,
    // 最小压缩比达到 0.8 时才会被压缩
    minRatio: 0.8,
    })
    ]
    }
    }
    }
    ...
    }
  • 上方我们通过在生产环境中增加 Gzip 压缩配置实现了打包后输出增加对应的 .gz 为后缀的文件,而由于我们配置项中配置的是只压缩大小超过 10240B(10kB)的 JS 及 CSS,因此不满足条件的文件不会进行 Gzip 压缩。