微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

webpack打包优化

目录

Ⅰ、webpack打包作用

Ⅱ、项目开始时:

一、配置proxy跨域

二、配置alias别名

Ⅲ、项目结束后(打包前)

一、修改静态资源路径(打包前必做,否则打包后白屏)

二、 关闭生产环境下的SourceMap映射文件

 三、使用CDN加速优化

四、去除console.log()打印以及注释 

五、npm run build打包(结束)

 


Ⅰ、webpack打包作用

     ① 提高打包速度

     ② 减小项目体积、提高首屏加载速度

     ③ 提高用户体验(骨架屏)

webpack打包操作主要在项目开始时项目结束后(打包前)两个阶段进行 

Ⅱ、项目开始时:

     ① 配置proxy跨域

     ② 配置alias别名

①、配置proxy跨域

module.exports = {
  publicPath: "./",
  devServer: {
    open: true,// 自动启动浏览器
    proxy: {
      "/api": {
        target: "http://47.115.85.237:3000/", // 线上后端地址
        changeOrigin: true, //允许跨域
        pathRewrite: {
          "^/api": "",
        },
      },
    },
  },
};
// proxy是代理的意思
// 代理跨域就是在欺骗浏览器 让浏览器认为你访问的还是 同源的localhost:8080 ,但是用代理把地址代理到了需要跨域的地址去了
 
// 首先第一步把vue.config.js放在项目的根目录下
// 然后重启项目
// 在这里代理的关键字是/api,也就是在之后请求的时候 在路径前拼接/api
// 如果用http 必须要把baseurl删除

②、配置alias别名

在vue项目开发中,组件化开发是我们不得不经常引用组件或插件,一些路径被频繁使用,为了简化代码,方便开发,我们将这些频繁使用的路径定义成简单的名字。

//加载path模块
const path = require('path')
//定义resolve方法,把相对路径转换成绝对路径
const resolve = dir => path.join(__dirname, dir)
 
module.exports = {
  chainWebpack: config => {
    // 添加别名
    config.resolve.alias
      .set('@', resolve('src'))
      .set('assets', resolve('src/assets'))
      .set('api', resolve('src/api'))
      .set('views', resolve('src/views'))
      .set('components', resolve('src/components'))
  }
}

 

Ⅲ、项目结束后(打包前)

   ① 修改静态资源路径(打包前必做,否则打包后白屏)

   ② 关闭生产环境sourceMap映射文件

   ③ 使用CDN加速优化

   ④ 去除console.log打印及注释

   ⑤ npm run build打包

①、修改静态资源路径(打包前必做,否则打包后白屏)

module.exports = {
  publicPath: './', // 静态资源路径(认/,打包后会白屏)
  outputDir: 'dist', // 打包后文件的目录 (认为dist)
  assetsDir: 'static', //  outputDir的静态资源(js、css、img、fonts)目录  认为‘’没有单独目录js/css/img在根目录中。
  }

②、 关闭生产环境下的SourceMap映射文件

我们关闭这个后,打包时将不会生成后缀名为.map的文件
这个文件用于 当我们程序出错时,我们可以看到是哪一部分报错。但我们在上线时,肯定是通过测试的,确保没有问题才会上线,所以我们可以不需要这种map文件
在vue.config.js文件

module.exports = {
productionSourceMap: false
// 关闭映射文件
}

 ③、使用CDN加速优化

cdn优化是指把第三方库比如(vue,vue-router,axios)通过cdn的方式引入项目中,这样vendor.js会显著减少,并且大大提升项目的首页加载速度,下面是具体操作:
注意:我们引入的版本库尽量根我们使用的版本一致

const isProduction = process.env.NODE_ENV === 'production';
// externals
const externals = {
  vue: 'Vue',
  'vue-router': 'VueRouter',
  vuex: 'Vuex',
  vant: 'vant',
  axios: 'axios'
}
// CDN外链,会插入到index.html中
const cdn = {
  // 开发环境
  dev: {
    css: [],
    js: []
  },
 // 生产环境
  build: {
    css: ['https://cdn.jsdelivr.net/npm/vant@2.12/lib/index.css'],
    js: [
      'https://cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.min.js',
      'https://cdn.jsdelivr.net/npm/vue-router@3.1.5/dist/vue-router.min.js',
      'https://cdn.jsdelivr.net/npm/axios@0.19.2/dist/axios.min.js',
      'https://cdn.jsdelivr.net/npm/vuex@3.1.2/dist/vuex.min.js',
      'https://cdn.jsdelivr.net/npm/vant@2.12/lib/vant.min.js'
    ]
  }
}
module.exports = {
  configureWebpack: config => {
    // 为生产环境修改配置...
    if (isProduction) {
      // externals
      config.externals = externals
    }
  },
  chainWebpack: config => {
    /**
     * 添加CDN参数到htmlWebpackPlugin配置中
     */
    config.plugin('html').tap(args => {
      if (isProduction) {
        args[0].cdn = cdn.build
      } else {
        args[0].cdn = cdn.dev
      }
      return args
    })
  }
}

然后在pubilc/index.html文件添加

   <!-- 使用CDN的CSS文件 -->
    <% for (var i in
      htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.css) { %>
      <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="preload" as="style" />
      <link href="<%= htmlWebpackPlugin.options.cdn.css[i] %>" rel="stylesheet" />
    <% } %>
     <!-- 使用CDN加速的JS文件,配置在vue.config.js下 -->
    <% for (var i in
      htmlWebpackPlugin.options.cdn&&htmlWebpackPlugin.options.cdn.js) { %>
      <script src="<%= htmlWebpackPlugin.options.cdn.js[i] %>"></script>
    <% } %>

④、去除console.log()打印以及注释 

首先需要下载插件

cnpm install uglifyjs-webpack-plugin --save-dev 

const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const isProduction = process.env.NODE_ENV === 'production';

  configureWebpack: config => {
    const plugins = [];
    if (isProduction) {
      plugins.push(
        new UglifyJsPlugin({
          uglifyOptions: {
            output: {
              comments: false, // 去掉注释
            },
            warnings: false,
            compress: {
              drop_console: true,
              drop_debugger: false,
              pure_funcs: ['console.log']//移除console
            }
          }
        })
      )
    }
  }

  项目中的注释以及console.log所占体积很小 

⑤、npm run build打包(结束)

 

 

 

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐