项目配置vue.config jsconfig babel.config .prettierc .env .eslintrc

.env

在一个产品的前端开发过程中,一般来说会经历本地开发、测试脚本、开发自测、测试环境、预上线环境,然后才能正式的发布。对应每一个环境可能都会有所差异,比如说服务器地址、接口地址、websorket地址…… 等等。在各个环境切换的时候,就需要不同的配置参数,所以就可以用环境变量和模式,来方便我们管理。

  •  在根目录添加.env文件,配置所有情况下都会用到的配置
  • .env.production对应生产环境
  • .env.development对应开发环境
  • .env.[model] 用户创建的环境

        npm run dev(serve) :其实是运行了 vue-cli service serve ,默认模式为  development (读取.env.development)。可以在 .env.development 文件下修改该模式的 NODE_ENV 。
        npm run build ,其实运行了 vue-cli service build ,默认模式为  production (读取.env.production)。可以在 .env.production 文件下修改该模式的 NODE_ENV 

        由于vue-cli只给我们默认配置了pro和dev两个环境,如果我们需要建立新环境,需要自己定义model值。

// package.json
{"scripts": {"serve": "vue-cli-service serve",//默认就是 development开发环境"build": "vue-cli-service build",//默认就是 production生产环境"serve:beta": "vue-cli-service serve --mode beta",...},

        beta为我们自建的环境,同时我们需要建立配置文件.env.beta

//.env.beta文件
NODE_ENV = 'beta';
VUE_APP_NODE_ENV = 'beta'
VUE_APP_HOST=beta.sandieyun.com

     环境变量定义必须以"VUE_APP_"作为前缀。

     在Vue.config.js里读取环境变量:

module.exports = {...devServer: {https: process.env.NODE_ENV !== 'dev',},
}

      项目中读取环境变量:

  get linkUrl() {return `https://app.${process.env.VUE_APP_HOST}/link/xxxx`;}

        除了环境变量,还能定义两个特殊变量:

  •  NODE_ENV - 会是 "development"、"production" 或 "test" 中的一个。具体的值取决于应用运行的模式。
  •  BASE_URL - 会和 vue.config.js 中的 publicPath 选项相符,即你的应用会部署到的基础路径。

vue.config.js

        vue.config.js 是一个可选的配置文件,如果在项目根目录上存在这个文件,则会被@vue/cli-service加载。

module.exports = {xxx:xxxx,...
}
publicPath

         publicPath 选项用于指定项目的公共路径,即项目部署时的基本 URL。 

        默认为"/"。

        默认情况下,Vue CLI 会假设你的应用是被部署在一个域名的根路径上,例如 https://www.my-app.com/

        如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.my-app.com/my-app/,则设置 publicPath 为 /my-app/

        publicPath可以被设置为''或者'./'。这样所有的资源都会被链接为相对路径,这样打出来的包可以被部署在任意路径。

outputDir

         当运行 vue-cli-service build 时生成的生产环境构建文件的目录,也就是打包后的文件目录。

assetsDir

        放置生成的静态资源 (js、css、img、fonts) 的目录。总目录名字叫:static,里面包含子目录,css,img,js三个文件夹。

indexPath

        指定生成的 index.html 的输出路径 (相对于 outputDir)。也可以是一个绝对路径,也可以将打包的index.html文件文字改成school,html。

module.exports = {outputDir: 'dist',assetsDir: 'static',indexPath: 'index.html'
}
 pages

        其值应该是一个对象,对象的 key 是入口的名字,value 是:\

module.exports = {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'}
}
productionSourceMap

        如果你不需要生产环境的 source map,可以将其设置为 false 以加速生产环境构建。

module.exports = {  
productionSourceMap: false, //因为内存占用问题,暂时关闭sourceMap
}
 devServer

        所有 webpack-dev-server 的选项都支持

  devServer: {// 非DEV环境则开启https协议https: process.env.NODE_ENV !== 'dev',// 禁用host的检查,使得webpack-dev-server可以接受来自任何网络环境下的请求disableHostCheck: true,},

        新版的vue-cli已经将disableHostCheck改成

 allowedHosts: 'all',
  lintOnSave 

        取值:true | false | 'warning' | 'default' | 'error'

        用于指定是否在保存文件时执行代码检查

  • 设置为 true 或 'warning' 时,eslint-loader 会将 lint 错误输出为编译警告。默认情况下,警告仅仅会被输出到命令行,且不会使得编译失败。
  • 如果你希望让 lint 错误在开发时直接显示在浏览器中,你可以使用 lintOnSave: 'default'。这会强制 eslint-loader 将 lint 错误输出为编译错误,同时也意味着 lint 错误将会导致编译失败。
  • 设置为 error 将会使得 eslint-loader 把 lint 警告也输出为编译错误,这意味着 lint 警告将会导致编译失败。
module.exports = {// 在保存文件时不会运行 lint 检查,禁用 linting 功能。lintOnSave: false,
}
configureWebpack

        如果这个值是一个对象,则会通过 webpack-merge 合并到最终的配置中。

const {optimize: { LimitChunkCountPlugin },
} = require('webpack');module.exports = {configureWebpack: {plugins: [new LimitChunkCountPlugin({maxChunks: 10,}),],},
}

        我们知道在webpack打包后会产生大量的chunk.xxxx的文件,如果chunk文件过多,会增加http请求的开销。所以我们加了webpack插件里的LimitChunkCountPlugin限制最大chunk文件数

chainWebpack

        是一个函数,会接收一个基于 webpack-chain 的 ChainableConfig 实例。允许对内部的 webpack 配置进行更细粒度的修改。说白了就是给你配置更精细的webpack配置。

chainWebpack: config =>config/** @description 使用CDN访问以下依赖 */.externals({'vue': 'Vue','ant-design-vue': 'antd','moment': 'moment','lodash': '_','echarts': 'echarts',})/** @description 压缩vue文件<template>中的换行 */.module.rule('vue').use('vue-loader').loader('vue-loader').tap(options => ({...options,whitespace: 'condense',})).end().end()/** @description 支持import excel文件 */.rule('file').test(/\.(xls|xlsx|doc|docx)(\?.*)?$/).use('url-loader').loader('url-loader').end(),

        这里其实是三部分配置:

        我们先看这个:这部分其实只是修改 Loader 选项,在默认的loader options中新加了一条whitespace

        

        这个是新增了一个file loader,当file name符合test里的正则表达式时,引用url-loader处理它 

        这个最难理解。我们先搞清楚什么是 externals

        官方的八股文是这么写的:

就是webpack可以不处理应用的某些依赖库,使用externals配置后,依旧可以在代码中通过CMD、AMD或者window/global全局的方式访问。

     其实就是把依赖插件抽离出来,通过CDN引入,而不占包体积。但是我们的项目文件又依赖这些插件生成的全局属性,比如window.Vue,window.echarts,window._。我们把依赖插件抽出来,那项目文件在打包的时候就会发生编译错误。所以我们又要把这些插件生成的全局变量名告诉webpack。

        具体可以看这篇文章,讲得很明白!Webpack--externals(外部扩展)详解_webpack externals-CSDN博客externals用法详解_webpack externalshttps://blog.csdn.net/weixin_39964419/article/details/127263941?utm_source=miniapp_weixin

jsconfig.json

        是vscode生成的。表示该目录是JavaScript项目的根目录。jsconfig.json文件指定根文件和JavaScript语言服务提供的功能选项。

{// 项目包含的文件"include": ["src/**/*"],// 项目排除的文件 搜索不会搜到这里面"exclude": ["node_modules"],"compilerOptions": {"target": "esnext","moduleResolution": "node","baseUrl": "./","strict": true,"paths": {"@/*": ["./src/*"]},"experimentalDecorators": true}
}

        ESNext:泛指,它永远指向下一个版本。这个paths可以这么用:

import { crossStorageModule } from '@/enum/store';


        

babel.config

        JavaScript 编译器配置,它可以把需要转译的代码转译成低版本兼容的代码

module.exports = {presets: ['@vue/cli-plugin-babel/preset'],
};

@vue/cli-plugin-babel/preset是一种预设

他构建在’@babel/preset-env’的基础上,并添加了一些针对Vue.js项目的优化。这个预设不仅确保你可以使用最新的javascript特性,还会根据Vue.js的需求对Babel进行配置

 .prettierrc

        依赖于vscode的Prettier - Code formatter扩展

         配置好后我们可以通过右键进行格式化

{// 缩进字节数"tabWidth": 2,// 缩进不使用tab,使用空格"useTabs": false,// 句尾添加分号"semi": true,// 使用单引号代替双引号"singleQuote": true,// props 是否用 引号 包裹"quoteProps": "consistent",// 单引号"jsxSingleQuote": false,// 行尾逗号"trailingComma": "all",// 花括号内填充空格 { a: 23 }"bracketSpacing": true,// 标签内有文字,尾标签>会单独成一行"bracketSameLine": false,// 箭头函数一个参数是否使用括号包裹参数"arrowParens": "avoid",// just for vue"vueIndentScriptAndStyle": false,// 换行标识"endOfLine": "auto"
}

.eslintrc.js

# 安装eslint
npm install eslint --save-dev

大多数IDE都自带eslint插件,在编写代码的时候会按照eslint的规则进行代码提示。

module.exports = {// 是否在父级目录寻找配置文件root: true,// 用于启用特定环境的全局变量env: {node: true,},extends: ['plugin:vue/essential', 'eslint:recommended', '@vue/prettier'],//用于设置解析器parser: 'vue-eslint-parser',parserOptions: {parser: '@babel/eslint-parser',ecmaFeatures: { legacyDecorators: true },},// 配置规则//"off" 或 0 - 关闭规则//"warn" 或 1 - 开启规则,使用警告级别的错误:warn (不会导致程序退出)// "error" 或 2 - 开启规则,使用错误级别的错误:error (当被触发的时候,程序会退出)rules: {'arrow-body-style': ['error', 'as-needed'],'camelcase': 'error','eqeqeq': ['error', 'smart'],'semi': ['error', 'always'],'no-var': 'error','no-duplicate-imports': 'error','no-template-curly-in-string': 'error','consistent-this': ['error', '不允许将this重命名'],'dot-notation': 'error','no-eval': 'error','no-implied-eval': 'error','no-multi-str': 'error','no-return-await': 'error','no-unneeded-ternary': 'error','no-unused-vars': ['error', { ignoreRestSiblings: true }],'object-shorthand': 'error','prefer-arrow-callback': 'error','prefer-const': ['error', { destructuring: 'all' }],'prefer-rest-params': 'error','require-await': 'error','no-restricted-syntax': ['error',{selector: 'ForInStatement',message: '用Object.keys().forEach()代替for in循环',},{selector: 'ForStatement',message: '如果没有性能原因,用forEach、map代替for循环',},],'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'warn','no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'warn','vue/multi-word-component-names': 'off',},
};
每次commit代码执行eslint检查

下载依赖

npm i -s -d lint-staged husky

在package.json配置

{"name": "triascloud-app-pc","version": "0.1.0","scripts": {"dev": "cross-env NODE_OPTIONS=--max-old-space-size=4096 vue-cli-service serve",},"dependencies": {...},"devDependencies": {...},"gitHooks": {"pre-commit": "lint-staged"},"lint-staged": {// 对js和vue文件进行检查"*.{js,vue}": ["cross-env NODE_ENV=production vue-cli-service lint","git add"]}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/105668.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小程序 | 小程序后端用什么语言开发比较好

目录 ♣️ 引言 选择合适的后端语言 推荐使用Node.js Node.js 的优点 其他备选语言 ♣️ 小结 ♣️ 引言 小程序的兴起已经成为了当今移动互联网时代的热点之一&#xff0c;而小程序后端的好坏直接影响着小程序的使用体验&#xff0c;因此&#xff0c;选择一种好的语言来…

一键批量转换,轻松将TS视频转为MP4视频,实现更广泛的播放和分享!

在享受精彩视频内容的同时&#xff0c;有时我们可能会面临一个问题&#xff1a;某些视频格式可能不太适合我们的播放设备或分享平台。特别是TS格式的视频&#xff0c;在一些情况下可能无法直接播放或上传。但是不用担心&#xff0c;因为我们为您提供了一款强大的视频剪辑工具&a…

数据特征选择 | Lasso特征选择(Python)

文章目录 效果一览文章概述源码设计小结效果一览 文章概述 Lasso算法是一种经典的线性回归算法,被广泛应用于特征选择和降维问题。相较于传统的线性回归算法,Lasso算法能够在保持预测准确性的同时,自动筛选出对目标变量影响较大的特征变量,从而达到降低模型复杂度、提高泛化…

Python文件读写实战:处理日常任务的终极工具!

更多资料获取 &#x1f4da; 个人网站&#xff1a;涛哥聊Python Python文件的读写操作时&#xff0c;有很多需要考虑的细节&#xff0c;这包括文件打开方式、读取和写入数据的方法、异常处理等。 在本文中&#xff0c;将深入探讨Python中的文件操作&#xff0c;旨在提供全面的…

TSINGSEE青犀智慧城市数字基座解决方案,助力城市数字化转型

一、行业背景 我国“十四五”规划纲要中提出&#xff0c;分级分类推进新型智慧城市建设&#xff0c;将物联网感知设施、通信系统等纳入公共基础设施统一规划建设&#xff0c;推进市政公用设施、建筑等物联网应用和智能化改造。完善城市信息模型平台和运行管理服务平台&#xf…

Godot2D角色导航-自动寻路教程(Godot设置导航代理的目标位置)

文章目录 创建导航NavigationAgent2D节点设置目标位置其他文章 创建导航 首先&#xff0c;创建一个基本的场景&#xff0c;下面的文章讲解了如何创建一个基本的导航场景&#xff0c;点击如下链接前往该文章&#xff1a; Godot2D角色导航-自动寻路教程 NavigationAgent2D节点 …

蓝桥杯(迷宫,C++)

输入&#xff1a; 思路&#xff1a; 1、注意输入用字符串。 2、采用广度搜素的方法来求解。 3、因为最后要求字典序最小且D<L<R<U,所以在遍历四个方向的时候&#xff0c; 先向下&#xff0c;再向左、右&#xff0c;最后向上。 #include<iostream> #include…

thinkphp6

unexpected , expecting case (T_CASE) or default (T_DEFAULT) or } 在模板中应用{switch}{/switch}标签,报错,其实是switch的问题&#xff0c;模板解析后&#xff0c;switch:和第一个case:之间不能有有输出的&#xff0c;一个空格也不行&#xff0c;所以第一个要紧跟着 Thi…

基于Jaya优化算法的电力系统最优潮流研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

数据库管理-第109期 19c OCM考后感(20231015)

数据库管理-第109期 19c OCM考后感&#xff08;202301015&#xff09; 距离上一篇又过了两周多&#xff0c;为啥又卡了这么久&#xff0c;主要是后面几个问题&#xff1a;1. 9月1日的19c OCM upgrade考试木有过&#xff0c;因为有一次免费补考机会就又预约了10月8日的考试&…

网络工程师知识点3

41、各个路由协议&#xff0c;在华为设备中的优先级&#xff1f; 直连路由 0 OSPF 10 静态 60 42、OSPF&#xff1a;开放式最短路径优先路由协议&#xff0c;使用SPF算法发现和计算路由 OSPF的优点&#xff1a; 1、收敛速度快&#xff0c;无路由自环&#xff0c;适用于大型网络…

Docker系列--镜像和容器备份与恢复的方法

原文网址&#xff1a;Docker系列--镜像和容器备份与恢复的方法_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍备份和恢复Docker镜像与容器的方法。 命令对比 保存与导出 docker save&#xff1a;保存的是镜像&#xff08;image&#xff09;。&#xff08;保存的是分层的…

解密人工智能:KNN | K-均值 | 降维算法 | 梯度Boosting算法 | AdaBoosting算法

文章目录 一、机器学习算法简介1.1 机器学习算法包含的两个步骤1.2 机器学习算法的分类 二、KNN三、K-均值四、降维算法五、梯度Boosting算法和AdaBoosting算法六、结语 一、机器学习算法简介 机器学习算法是一种基于数据和经验的算法&#xff0c;通过对大量数据的学习和分析&…

软件设计师_面向对象_学习笔记

文章目录 1 面向对象基本概念2 设计模式3 UML4 设计模式4.1 设计模式的基本概念4.2 设计模式的分类4.3 创建型模式 1 面向对象基本概念 2 设计模式 3 UML 4 设计模式 4.1 设计模式的基本概念 模式&#xff1a;通俗的来说就是成功方案的复用。 架构模式从全局看待问题。设计模式…

LiveGBS流媒体平台GB/T28181功能-国标流媒体服务同时兼容内网收流外网收流多网段设备收流

LiveGBS流媒体平台GB/T28181功能-国标流媒体服务同时兼容内网收流外网收流多网段设备收流 1、背景2、设备接入播放2.1、查看通道2.2、直播播放 3、默认收流地址配置4、其它网络设备收流配置5、搭建GB28181视频直播平台 1、背景 服务器部署的时候&#xff0c;可能有多个网卡多个…

JAVA中的垃圾回收

JVM规范说了并不需要必须回收方法区&#xff0c;不具有普遍性&#xff0c;永久代使用的是JVM之外的内存 引用计数:效率要比可达性分析要强&#xff0c;随时发现&#xff0c;随时回收&#xff0c;实现简单&#xff0c;但是可能存在内存泄漏 局部变量表&#xff0c;静态引用变量&…

利达卓越:发挥金融力量,促进团队发展

随着中国经济的快速增长和金融改革的逐步深化&#xff0c;我国金融业取得了令人瞩目的发展。作为经济的重要支柱&#xff0c;我国金融业的规模和实力不断扩大&#xff0c;已经成为全球最大的金融市场之一。利达卓越是一支由管理精英组成的团队&#xff0c;专注于金融行业的投资…

Kafka消费者使用案例

本文代码链接&#xff1a;https://download.csdn.net/download/shangjg03/88422633 1.消费者和消费者群组 在 Kafka 中&#xff0c;消费者通常是消费者群组的一部分&#xff0c;多个消费者群组共同读取同一个主题时&#xff0c;彼此之间互不影响。Kafka 之所以要引入消费者群组…

HTTP 响应头 X-Frame-Options

简介 X-Frame-Options HTTP 响应头用来给浏览器一个指示。该指示的作用为&#xff1a;是否允许页面在 <frame>, </iframe> 或者 <object> 中展现。 网站可以使用此功能&#xff0c;来确保自己网站的内容没有被嵌套到别人的网站中去&#xff0c;也从而避免了…

【linux】E45: ‘readonly‘ option is set (add ! to override)

vim 编辑文件保存时 E45:设置了“只读”选项&#xff08;添加&#xff01;以覆盖&#xff09; 输入&#xff1a; wq! 提示 "/etc/my.cnf" E212: Cant open file for writing 依然是没有权限&#xff1a; 解决一&#xff1a; 切换用户&#xff1a; su root 解…