vue vue.config.js介绍

本文介绍了 Vue vue.config.js的配置解析

vue.config.js

vue项目的配置文件,需要严格遵照 JSON 的格式来写。结构如下:

module.exports = {
  // 选项...
}

publicPath

部署应用包时的基本 URL。例如 https://www.xxx.com/,则publicPath
则为“/”,如果应用被部署在 https://www.xxx.com/my-app/,则设置 publicPath 为 /my-app/。

outputDir

当运行 vue-cli-service build 时生成的生产环境构建文件的目录。注意目标目录的内容在构建之前会被清除 (构建时传入 --no-clean 可关闭该行为)。

assetsDir

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

devServer

在开发环境下API 请求的代理到 API 服务器。这个问题可以通过 vue.config.js 中的 devServer.proxy 选项来配置。生产环境一般由Nginx负责。

由于我们的项目需要在不同环境下进行运行(开发,生产,测试等),这避免我们需要多次的去切换请求的地址以及相关的配置,vue-cli2是可以直接在config文件中进行配置的,但是vue-cli4和vue-cli3已经简化了,没有config文件怎么办?

建立.env系列文件
首先我们在根目录新建3个文件,分别为

.env.development,.env.production,.env.test

注意文件是只有后缀的。

.env.development 模式用于serve,开发环境,就是开始环境的时候会引用这个文件里面的配置

.env.production模式用于build,线上环境。

.env.test 测试环境

vue.config.js详解

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

这个文件应该导出一个包含了选项的对象:
完整配置实例:

// vue.config.js
module.exports = {
    //默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上,例如 https://www.my-app.com/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.my-app.com/my-app/,则设置 publicPath 为 /my-app/。
    //这个值也可以被设置为空字符串 ('') 或是相对路径 ('./')
    publicPath: './',
    outputDir:"dist",//当运行 vue-cli-service build 时生成的生产环境构建文件的目录名字  默认为"dist"
    assetsDir: './static',//当运行 vue-cli-service build 时生成的生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录  默认为"",默认与生成的index.html同级
    indexPath:"index.html",//npm run build之后生成的入口文件 默认为index.html,此属性可以省略,省略了默认就是index.html
    filenameHashing:true,//默认情况下,生成的静态资源在它们的文件名中包含了 hash 以便更好的控制缓存。然而,这也要求 index 的 HTML 是被 Vue CLI 自动生成的。如果你无法使用 Vue CLI 生成的 index HTML,你可以通过将这个选项设为 false 来关闭文件名哈希。
     pages: {
       index: {
         // page 的入口
         entry: 'src/index/main.js',
         // 模板来源
         template: 'public/index.html',
         // 在 dist/index.html 的输出
         filename: 'index.html',
         // 当使用 title 选项时,
         // template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
         title: 'Index Page',
         // 在这个页面中包含的块,默认情况下会包含
         // 提取出来的通用 chunk 和 vendor chunk。
         chunks: ['chunk-vendors', 'chunk-common', 'index']
       },
       // 当使用只有入口的字符串格式时,
       // 模板会被推导为 `public/subpage.html`
       // 并且如果找不到的话,就回退到 `public/index.html`。
       // 输出文件名会被推导为 `subpage.html`。
       subpage: 'src/subpage/main.js'
     },
     
    //lintOnSave:
    //1.是否在开发环境下通过 eslint-loader 在每次保存时 lint 代码。这个值会在 @vue/cli-plugin-eslint 被安装之后生效。
    //2.设置为 true 时,eslint-loader 会将 lint 错误输出为编译警告。默认情况下,警告仅仅会被输出到命令行,且不会使得编译失败。
    //3.如果你希望让 lint 错误在开发时直接显示在浏览器中,你可以使用 lintOnSave: 'error'。这会强制 eslint-loader 将 lint 错误输出为编译错误,同时也意味着 lint 错误将会导致编译失败。
    //4.或者,你也可以通过设置让浏览器 overlay 同时显示警告和错误:
    //module.exports = {
      //devServer: {
        //overlay: {
        //  warnings: true,
        //  errors: true
        //}
      //}
    //}
    lintOnSave:true,
    runtimeCompiler:false,//是否使用包含运行时编译器的 Vue 构建版本。设置为 true 后你就可以在 Vue 组件中使用 template 选项了,但是这会让你的应用额外增加 10kb 左右。
    transpileDependencies:[],//默认情况下 babel-loader 会忽略所有 node_modules 中的文件。如果你想要通过 Babel 显式转译一个依赖,可以在这个选项中列出来。
    productionSourceMap:true,//如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建   这玩意设置成false之后,能把打包后的文件大小减小80%   当时我的项目大小是8m+  设成false之后变成了2m+     productionSourceMap:false,之后,就不会生成map文件,map文件的作用在于:项目打包后,代码都是经过压缩加密的,如果运行时报错,输出的错误信息无法准确得知是哪里的代码报错。也就是说map文件相当于是查看源码的一个东西。如果不需要定位问题,并且不想被看到源码,就把productionSourceMap 置为false,既可以减少包大小,也可以加密源码。
    crossorigin:"undefined",//设置生成的 HTML 中 <link rel="stylesheet"> 和 <script> 标签的 crossorigin 属性。需要注意的是该选项仅影响由 html-webpack-plugin 在构建时注入的标签 - 直接写在模版 (public/index.html) 中的标签不受影响。
    integrity:false,//在生成的 HTML 中的 <link rel="stylesheet"> 和 <script> 标签上启用 Subresource Integrity (SRI)。如果你构建后的文件是部署在 CDN 上的,启用该选项可以提供额外的安全性。需要注意的是该选项仅影响由 html-webpack-plugin 在构建时注入的标签 - 直接写在模版 (public/index.html) 中的标签不受影响。另外,当启用 SRI 时,preload resource hints 会被禁用,因为 Chrome 的一个 bug 会导致文件被下载两次。
    configureWebpack:Object | Function,//下面举个例子:
    configureWebpack: config => {
        if (process.env.NODE_ENV === "production") {
            // 为生产环境修改配置...
            config.mode = "production";
            // 这里修改下 
            config.optimization.minimizer = [
                new UglifyJsPlugin({
                    uglifyOptions: {
                        compress: {
                            warnings: false,
                            drop_console: true, //console
                            drop_debugger: true,
                            pure_funcs: ['console.log'] //移除console
                        }
                    }
                })
            ]
            //打包文件大小配置
            config["performance"] = {
                "maxEntrypointSize":10000000,
                "maxAssetSize":30000000
            }
        } else {
            // 为开发环境修改配置...
            config.mode = "development";
        }
    },
//上面是统一使用configureWebpack的函数模式,然后函数模式里面默认会有一个config参数,需要增加或者修改configureWebpack对应的参数,就直接使用config去修改就可以了!
//我这里使用了两个功能,第一个是打包build的时候去掉console的调试信息,第二个就是修改打包静态资源文件大小设置的配置
    chainWebpack:function,//是一个函数,会接收一个基于 webpack-chain 的 ChainableConfig 实例。允许对内部的 webpack 配置进行更细粒度的修改。下面举个例子
    chainWebpack: config => {
      config.resolve.alias
        .set('@', resolve('src'))//设置@快捷到src目录
        .set('view', resolve('src/view'))//设置view快捷指定到src/view目录
        .set('$css',resolve('/static/css'))
        .set('$common',resolve('/components'))
        .set('$api',resolve('/api'))
        .set('$page',resolve('/pages'))
        .set('$js',resolve('/static/js'));
        // 删除预加载
      config.plugins.delete('preload')
      config.plugins.delete('prefetch')
        // 压缩代码
      config.optimization.minimize(true)
        // 分割代码
      config.optimization.splitChunks({
          chunks: 'all'
      })
    },
    css:{
        modules:false,//默认情况下,只有 *.module.[ext] 结尾的文件才会被视作 CSS Modules 模块。设置为 true 后你就可以去掉文件名中的 .module 并将所有的 *.(css|scss|sass|less|styl(us)?) 文件视为 CSS Modules 模块。
        extract:true,//Default: 生产环境下是 true,开发环境下是 false  是否将组件中的 CSS 提取至一个独立的 CSS 文件中 (而不是动态注入到 JavaScript 中的 inline 代码)。
        sourceMap:false,//是否为 CSS 开启 source map。设置为 true 之后可能会影响构建的性能。
        loaderOptions:{},//向 CSS 相关的 loader 传递选项。例如:
      },
      devServer:{
        proxy:'http://localhost:8080',//如果你的前端应用和后端 API 服务器没有运行在同一个主机上,你需要在开发环境下将 API 请求代理到 API 服务器。这个问题可以通过 vue.config.js 中的 devServer.proxy 选项来配置。http://localhost:8080这会告诉开发服务器将任何未知请求 (没有匹配到静态文件的请求) 代理到http://localhost:4000   如果你想要更多的代理控制行为,也可以使用一个 path: options 成对的对象。完整的选项可以查阅 http-proxy-middleware 。
        proxy: {
          '/rng': {
            target: '<url>',// 后台接口域名
             secure: false,  // 如果是https接口,需要配置这个参数
            ws: true,//如果要代理 websockets,配置这个参数
            changeOrigin: true//是否跨域
            //我的 api='/rng'我的请求地址  ${api}/xxxx/xxx ,请求地址就为 '/rng/xxxx/xxx'当node服务器 遇到 以 '/rng' 开头的请求,就会把 target 字段加上,那么我的请求地址就为 http://45.105.124.130:8081/rng/xxxx/xxx
          },
          '/foo': {
            target: '<other_url>'
          }
         }
      },
      parallel:'boolean',//是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用,仅作用于生产构建。
    pluginOptions:{
    //less全局变量引用
        'style-resources-loader': {
          preProcessor: 'less',
          patterns: [
            path.resolve(__dirname, './src/assets/varibles.less'),
          ]
        }
    },
},
上一篇 下一篇


推荐文章

  • Pandas 介绍

    本文介绍了 什么是Pandas ,Pandas 是 Python 语言的一个扩展程序库,用于数据分析。Pandas 是一个开放源码、BSD 许可的库,提供高性能、易于使用的数据结构和数据分析工具,pandas主要数据结构有 Series 和 DataFrame
    日期: 2023-07-07
  • 区块链介绍

    本文介绍了区块链
    日期: 2023-04-21
  • python内置的集成开发工具是什么, IDLE介绍

    本文介绍了 python内置的集成开发工具IDLE
    日期: 2023-04-14
  • Spring框架介绍

    本文介绍了 Spring框架
    日期: 2023-03-14
  • git介绍,国内代码库 gitee,coding.net,gitcode.net

    Git 教程 Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,git原理介绍,国内比较著名的代码托管库gitee,coding.net,gitcode.net介绍
    日期: 2023-03-10
  • YAML基础介绍

    本文介绍了 YAML基础概念,语法规则
    日期: 2023-03-08
  • Vue3 介绍

    本文对vue3做了简单介绍 Vue.js 是一套构建用户界面的渐进式框架。
    日期: 2023-03-08
  • Sqlite介绍

    本文介绍了 sqlite的基本概念 作为嵌入式关系型数据库 ,sqlite特性
    日期: 2023-02-22
评论
说点什么吧?

发表评论

取消回复
  最新文章