vue-cli3.0 config配置

今天在对vue-cli3+进行配置vue.config.js配置做个记录,
本人配置

const path = require('path');
// const HtmlWebpackPlugin = require('html-webpack-plugin')

const UglifyJsPlugin  = require('uglifyjs-webpack-plugin');// 打包时去除consolelog等信息

const webpack = require('webpack')

//版本号
let { version } = require('./package.json');
version = version.replace(/\./g,'_');


function resolve(dir) {
    return path.join(__dirname, dir)
}

module.exports = {
    // publicPath:process.env.NODE_ENV === 'production' ? './' : '/',
    //基本路径
    publicPath: './',//默认的'/'是绝对路径,如果不确定在根路径,改成相对路径'./'
    // 输出文件目录
    // outputDir: 'dist',
    outputDir: process.env.NODE_ENV === 'production' ?'ezh':'dist',
    assetsDir: 'static',
    indexPath: 'index.html',
    // eslint-loader 是否在保存的时候检查
    lintOnSave: false,
    // 生产环境是否生成 sourceMap 文件
    productionSourceMap: false,
    // css相关配置
    css: {
        // 是否使用css分离插件 ExtractTextPlugin
        extract: {
            // 文件名
            filename: 'css/[name].[contenthash:5].css',
            chunkFilename:'css/[name].[contenthash:5].css',
        },
        // 开启 CSS source maps?
        sourceMap: false,

    },
    pwa: {}, // PWA 插件相关配置 see https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-pwa
    // webpack-dev-server 相关配置
    devServer: {
        open: true,//open 在devServer启动且第一次构建完成时,自动用我们的系统的默认浏览器去打开要开发的网页
        host: '0.0.0.0',//默认是 localhost。如果你希望服务器外部可访问,指定如下 host: '0.0.0.0',设置之后之后可以访问ip地址
        port: 8080,
        hot: true,//hot配置是否启用模块的热替换功能,devServer的默认行为是在发现源代码被变更后,通过自动刷新整个页面来做到事实预览,开启hot后,将在不刷新整个页面的情况下通过新模块替换老模块来做到实时预览。
        https: false,
        hotOnly: false,// hot 和 hotOnly 的区别是在某些模块不支持热更新的情况下,前者会自动刷新页面,后者不会刷新页面,而是在控制台输出热更新失败
        proxy: {
            '/api': {
                target: 'http://loadhost:8080', //目标接口域名
                secure: false, //false为http访问,true为https访问
                ws: true,
                changeOrigin: true, //是否跨域
                pathRewrite: {
                    '^/api': ''
                }
            }
        }, // 设置代理
        overlay: {
            warnings: true,
            errors: true
        }, // 错误、警告在页面弹出
        // before: app => { }
    },
    // 第三方插件配置
    pluginOptions: {
    },
  
    // webpack配置
    chainWebpack: (config) => {
        //对images进行处理
        config.module
            .rule('images')
            .test(/\.(png|jpe?g|gif|webp)(\?.*)?$/)
            .use('url-loader')
            .loader('url-loader')
            .tap(options => {
                // 修改它的选项...
                options.fallback.options.name = 'img/[name].[ext]?'; //去除图片hash
                options.limit = 1024 * 10; //这是字节(Byte)限制,1KB = 1024Byte ,当图片的大小小于 1KB ,则会被转为 base64格式,打包进js文件,大于1KB,则会被打包进 img 文件夹,供链接请求获取。
                return options
            });

        // 修复HMR
        config.resolve.symlinks(true);
        // 别名配置 // 开发生产共同配置
        config.resolve.alias
            .set('@', path.resolve('./src'))
            .set('@a', path.resolve('./src/assets'))
            .set('@c', path.resolve('./src/components'))
            .set('@v', path.resolve('./src/view'));
            // .set('jquery$', 'jquery/dist/jquery.min.js');
    },
    //webpack配置
    configureWebpack: (config) => {
        if (process.env.NODE_ENV === 'production') {
            // 为生产环境修改配置...
            config.mode = 'production'
            // 将每个依赖包打包成单独的js文件
            let optimization = {
                runtimeChunk: 'single',
                splitChunks: {
                    chunks: 'all',
                    maxInitialRequests: Infinity,
                    minSize: 20000,
                    cacheGroups: {
                        vendor: {
                            test: /[\\/]node_modules[\\/]/,
                            name (module) {
                                // get the name. E.g. node_modules/packageName/not/this/part.js
                                // or node_modules/packageName
                                const packageName = module.context.match(/[\\/]node_modules[\\/](.*?)([\\/]|$)/)[1]
                                // npm package names are URL-safe, but some servers don't like @ symbols
                                return `npm.${packageName.replace('@', '')}`
                            }
                        }
                    }
                },
            
                minimizer: [
                ]
            };


            Object.assign(config, {
                optimization,
                //给文件添加版本号
                output:{
                    ...config.output,
                    filename: `static/js/[name].[contenthash:5].${version}.js`,
                    chunkFilename: `static/js/[name].[contenthash:5].${version}.js`
                },
                // 插件配置
                plugins:[
                    ...config.plugins,
                ]
            })
        } else {
            // 为开发环境修改配置...
            config.mode = 'development'
          
        }


    }
};



参考配置

const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
 
module.exports = {
  publicPath: './',
  //文件名hash
  filenameHashing: false,
  //生成source map
  productionSourceMap: false,
  pages: {
    index: {
      // page 的入口
      entry: 'src/main.js',
      // 模板来源
      template: 'public/index.html',
      // 在 dist/index.html 的输出
      filename: 'index.html',
      // 当使用 title 选项时,
      // template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
      title: '管理后台',
      // 在这个页面中包含的块,默认情况下会包含
      // 提取出来的通用 chunk 和 vendor chunk。
      //chunks: ['chunk-vendors', 'chunk-common', 'index']
      cdn: {
        js: [
          'https://cdn.bootcss.com/vue/2.6.11/vue.min.js',
          'https://cdn.bootcss.com/vue-router/3.1.3/vue-router.min.js',
          'https://cdn.bootcss.com/axios/0.19.2/axios.min.js',
          'https://cdn.bootcss.com/element-ui/2.13.0/index.js'
        ],
        css: [
          'https://cdn.bootcss.com/element-ui/2.13.0/theme-chalk/index.css'
        ]
      }
    }
  },
  devServer : {
    proxy : {
      '/adapter/' : {
        target : 'http://localhost',
        changeOrigin : true,
        pathRewrite : {
        '^/adapter/' : '/'
        }
      }
    }
  },
  configureWebpack: config => {
 
    // 开发时也使用cdn是为了方便和版本统一 当然也可以本地时用node_modules,发布用cdn
    config.externals = {
      'vue': 'Vue',
      'vue-router': 'VueRouter',
      'axios': 'axios',
      'element-ui': 'ELEMENT'
    }
 
    // 为生产环境修改配置
    if (process.env.NODE_ENV === 'production') {      
 
      config.plugins.push(
        // 使用UglifyJsPlugin去掉console 可以略微降低文件大小
        new UglifyJsPlugin({
          uglifyOptions: {
            compress: {
              drop_debugger: true,
              drop_console: true,  //生产环境自动删除console
            },
            warnings: false,
          },
          sourceMap: false,
          parallel: true //使用多进程并行运行来提高构建速度。默认并发运行数:os.cpus().length - 1。
        })
      );
    }
  }
  
}

参考链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值