vue cli 3 那些事儿
配置 eslint
可在 package.json
中的 eslintConfig
中配置,比如允许在代码中使用 console,package.json 中配置如下
...
"eslintConfig": {
"root": true,
"env": {"node": true},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"rules": {
"no-console": 0
},
"parserOptions": {
"parser": "babel-eslint"
}
},
配置环境变量
我们经常需要根据环境变量来做出一些变化,比如:在测试时连接测试服务器,在上线时使用生产服务器:我们可以新建一个 npm run debug
命令,通过这个命令,可以在 build 之后保证代码请求的是测试服务器的 api。首先我们要在 package.json 中加入这个命令:
"scripts": {
"serve": "vue-cli-service serve",
"dev": "vue-cli-service serve",
"debug": "vue-cli-service build --mode debug",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
这样我们就创建了一个 debug 模式,那么这个模式下的环境变量要写到哪里呢?我们需要在 src 的同级目录下创建一个 .env.debug
的文件,在文件中写下面的内容:
NODE_ENV=production
VUE_APP_HOST=https://example.com
根据文档的描述,每一个环境变量都要写成 KEY=value
的形式,如果这个变量是自定义的变量,而且需要在页面中使用,还要加上 VUE_APP
前缀。看到这里,有同学可能有疑问了,NODE_ENV 不应该也是 debug
吗?
这里的 NODE_ENV 是一个特殊的变量,如果你希望 debug 模式像 production 那样构建出代码,就必须将NODE_ENV设置成 production,否则打包出来的东西可能不是你想要的。我们可以理解成创建了一个debug模式,这个模式继承自production模式。
接下来讲一下VUE_APP_HOST这个变量,我们注意到这个变量的前缀带有VUE_APP,根据文档,如果你需要在页面js中使用这个环境变量,就必须带这个前缀,不然在页面中这个变量是无效的。
配置 index.html
vue-cli3 中的 index.html 文件被放在了与 src 目录同级的 public 目录下,可以在 index.html 根据环境变量实现一些逻辑,举个例子,我想在 production 模式中加入腾讯移动统计相关的代码:
<% if(process.env.NODE_ENV === 'production'){%>
<script>
var _mtac = {};
(function() {
var mta = document.createElement("script");
mta.src = "//pingjs.qq.com/h5/stats.js?v2.0.4";
mta.setAttribute("name", "MTAH5");
mta.setAttribute("sid", "");
mta.setAttribute("cid", "");
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(mta, s);
})();
</script>
<% }%>
配置生成的 index.html 路径
这个配置在src目录同级的vue.config.js
文件中,有一个indexPath
字段,就是它了。如果你是在后端的模版中使用vue,你可能需要将index.html放到后端的views目录下,而不是默认的static目录下,来配合后端的同学:
module.exports = {
indexPath: '../../../views/activities/kan/index.html'
}
而且这个路径不会受项目路径的限制,就是说build 出来的index.html完全可以在vue项目根目录的同级或者上层。
配置生成的 js/css 目录
这个路径由outputDir
字段来控制。就是将生成的js,css,img等放到哪个文件目录下。这个路径同样不受项目目录的约束。通过indexPath和outputDir,我们就可以做到在build时,index.html和 css,js等静态资源分开存放。
配置资源加载路径
这个路径由publicPath
字段来控制。这个字段的含义是,当浏览器拿到你生成的index.html后,该如何访问build出来的app.js和app.css,如果配置出错,将造成app.js,app.css访问不到。与outDir字段的区别是,前者是一个文件目录,后者是在项目部署之后,通过http协议访问的路径。
配置多页面
由pages
字段来控制。这个字段接收多个页面配置,每个页面配置有两种形式:字符串形式和对象形式。
- 字符串形式:
当使用字符串形式时,key是页面名字,value是该页面的入口js;
pages: {
subpage: 'pages/subpage/main.js'
}
有了入口js文件,在build时,webpack会到public目录下找subpage.html作为这个页面的html模板文件。如果没有这个文件,就会使用默认的index.html文件。
- 对象形式
和字符串形式比起来,对象形式就可以更加灵活的配置一个页面:
index: {
// page 的入口
entry: 'src/index/main.js',
// 模板来源
template: 'public/index.html',
// 输出的html 文件路径
filename: '../../views/coaches/site-info.tpl',
// 页面要显示的title
// template 中的 title 标签需要是 <title><%= htmlWebpackPlugin.options.title %></title>
title: 'Index Page',
// 在这个页面中包含的块,默认情况下会包含
// 提取出来的通用 chunk 和 vendor chunk。
chunks: ['chunk-vendors', 'chunk-common', 'index']
},
这里不好理解的是chunks字段,chunks其实就是需要把哪些静态资源放到生成的index.html中,以上面的index页面为例,如果你去掉index chunk,则生成的index页面不会有引用index.js的script标签,访问index 页面时,也就不会加载index.js。
关于'chunk-vendors', 'chunk-common'的区别,可以参考这篇文章[]
常用技巧
---恢复内容结束---
### 配置 eslint
可在 package.json
中的 eslintConfig
中配置,比如允许在代码中使用 console,package.json 中配置如下
...
"eslintConfig": {
"root": true,
"env": {"node": true},
"extends": [
"plugin:vue/essential",
"eslint:recommended"
],
"rules": {
"no-console": 0
},
"parserOptions": {
"parser": "babel-eslint"
}
},
配置环境变量
我们经常需要根据环境变量来做出一些变化,比如:在测试时连接测试服务器,在上线时使用生产服务器:我们可以新建一个 npm run debug
命令,通过这个命令,可以在 build 之后保证代码请求的是测试服务器的 api,首先我们要在 package.json 中加入这个命令:
"scripts": {
"serve": "vue-cli-service serve",
"dev": "vue-cli-service serve",
"debug": "vue-cli-service build --mode debug",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
这样我们就创建了一个 debug 模式,那么这个模式下的环境变量要写到哪里呢?我们需要在 src 的同级目录下创建一个 .env.debug
的文件,在文件中写下面的内容:
NODE_ENV=production
VUE_APP_HOST=https://example.com
根据文档的描述,每一个环境变量都要写成 KEY=value
的形式,如果这个变量是自定义的变量,而且需要在页面中使用,还要加上 VUE_APP
前缀。看到这里,有同学可能有疑问了,NODE_ENV 不应该也是 debug
吗?
这里的 NODE_ENV 是一个特殊的变量,如果你希望 debug 模式像 production 那样构建出代码,就必须将NODE_ENV设置成 production,否则打包出来的东西可能不是你想要的。我们可以理解成创建了一个debug模式,这个模式继承自production模式。
接下来讲一下VUE_APP_HOST这个变量,我们注意到这个变量的前缀带有VUE_APP,根据文档,如果你需要在页面js中使用这个环境变量,就必须带这个前缀,不然在页面中这个变量是无效的。
配置 index.html
vue-cli3 中的 index.html 文件被放在了与 src 目录同级的 public 目录下,可以在 index.html 根据环境变量实现一些逻辑,举个例子,我想在 production 模式中加入腾讯移动统计相关的代码:
<% if(process.env.NODE_ENV === 'production'){%>
<script>
var _mtac = {};
(function() {
var mta = document.createElement("script");
mta.src = "//pingjs.qq.com/h5/stats.js?v2.0.4";
mta.setAttribute("name", "MTAH5");
mta.setAttribute("sid", "");
mta.setAttribute("cid", "");
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(mta, s);
})();
</script>
<% }%>
配置生成的 index.html 路径
这个配置在src同级的vue.config.js
文件中,有一个indexPath
字段,就是它了,如果你是在后端的模版中使用vue,你可能将index.html放到views目录下,而不是默认的static目录下,来配合后端的同学:
module.exports = {
indexPath: '../../../views/activities/kan/index.html'
}
而且这个路径不会受项目路径的限制,就是说build 出来的index.html完全可以在vue项目根目录的同级或者上层。
配置生成的 js/css 目录
这个路径由outputDir
字段来控制。就是将生成的js,css,img等放到哪个文件目录下。这个路径同样不受项目目录的约束。
配置资源加载路径
这个路径由publicPath
字段来控制。这个字段的含义是,当浏览器拿到你生成的index.html后,该如何访问build出来的app.js和app.css,如果配置出错,将造成app.js,app.css访问不到。与outDir字段的区别是,前者是一个文件目录,后者是在项目部署之后,通过http协议访问的路径。
配置多页面
由pages
字段来控制。这个字段接收多个页面配置,每个页面配置有两种形式:字符串形式和对象形式。
- 字符串形式: 当使用字符串形式时,key是页面名字,value是该页面的入口js;
pages: { subpage: 'pages/subpage/main.js' }
有了入口js文件,在build时,webpack会到public目录下找subpage.html作为这个页面的html模板文件。如果没有这个文件,就会使用默认的index.html文件。
- 对象形式 和字符串形式比起来,对象形式就可以更加灵活的配置一个页面:
module.exports = {
pages: {
index: {
// page 的入口
entry: 'src/index/main.js',
// 模板来源
template: 'public/index.html',
// 在 build 时 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'
}
}
这里不好理解的是chunks字段,chunks其实就是需要把哪些静态资源放到生成的index.html中。以上面的index页面为例,如果你去掉index chunk,则生成的index页面不会有引用index.js的script标签,访问index 页面时,也就不会加载index.js。 关于'chunk-vendors', 'chunk-common'的区别,可以参考这里
vue cli 3 那些事儿的更多相关文章
- vue cli 3.x 项目部署到 github pages
github pages 是 github 免费为用户提供的服务,写博客,或者部署一些纯静态项目. 最近将 vue cli 3.x 初始化项目部署到 github pages,踩了一些坑,记录如下. ...
- @vue/cli 3.0 使用 svg-sprite-loader 加载本地 SVG 文件
目录 @vue/cli 3.0 使用 svg-sprite-loader 加载本地 SVG 文件 运行 使用 配置 svg-sprite-loader 调用当前环境下的颜色 props @vue/cl ...
- vue cli使用融云实现聊天
公司有个项目要实现一个聊天功能,需求如下图,略显随意 公司最终选择融云这个吊炸天的即时通信,文档详细的一匹,刚开始看文档感觉很详细实现起来也不麻烦,有很多开源的demo可以在线演示和下载 不过我们的项 ...
- Vue CLI 3.0脚手架如何在本地配置mock数据
前后端分离的开发模式已经是目前前端的主流模式,至于为什么会前后端分离的开发我们就不做过多的阐述,既然是前后端分离的模式开发肯定是离不开前端的数据模拟阶段. 我们在开发的过程中,由于后台接口的没有完成或 ...
- Vue CLI 3使用:浏览器兼容性
package.json 文件里的 browserslist 字段 (或一个单独的 .browserslistrc 文件),指定了项目的目标浏览器的范围.这个值会被 @babel/preset-env ...
- 基于vue cli 3.0创建前端项目并安装cube-ui
前提条件: 安装node.js. 国内的开发者最好先配置淘宝镜像. 之后用cnpm来代替npm命令. 项目创建过程: 打开cmd,输入命令进入目标工作空间,以本机项目为例: cd /d d: cd D ...
- Vue CLI 3+tinymce 5富文本编辑器整合
基于Vue CLI 3脚手架搭建的项目整合tinymce 5富文本编辑器,vue cli 2版本及tinymce 4版本参考:https://blog.csdn.net/liub37/article/ ...
- vue cli 3.0创建项目
.npm i -g @vue/cli .vue create my-project 此处有两个选择: 1.default (babel, eslint)默认套餐,提供babel和eslint支持 2. ...
- vue cli 3 lintOnSave 配置有时无效问题
一个使用vue cli 3.2创建的项目,创建时未开启 lintOnSave,后来希望开启并设置为 lintOnSave: 'error',但配置不生效. 解决方法1:新创建项目(此时vue cli ...
随机推荐
- asp.net core 系列 2 启动类 Startup.CS
学无止境,精益求精 十年河东,十年河西,莫欺少年穷 学历代表你的过去,能力代表你的现在,学习代表你的将来 在探讨Startup启动类之前,我们先来了解下Asp.NET CORE 配置应用程序的执行顺序 ...
- gsoap工具生成wsdl接口 注意事项
wsdl是通过wsdl文件作为不同应用的通信接口,所以如何生成wsdl语言很重要,但是很多时候我们发现自己编写的头文件通过gsoap工具soapcpp2.exe从头文件中无法正常生成对应的wsdl语言 ...
- js-深拷贝浅拷贝
深拷贝浅拷贝可以考察一个人的很多方面,例如:基本功,逻辑能力,编码能力: 在实际工作中的应用:比如用于页面展示的数据状态,与需要传给后端的数据包中,有部分字段的值不一致的话,就需要在传参时根据接口文档 ...
- php 除10取整,取十位数前面一个数字,百位前两个数字
需求:php 除10取整,取十位数前面一个数字,百位前两个数字,并把大于2的加红显示 例:0-9,10-19,20-29,30-39,110-119对应为:0 1 2 3 11 实现主要方法:$num ...
- fatal error: openssl/bn.h: No such file or directory
出现如下错误 fatal error: openssl/bn.h: No such file or directory 解决办法 # sudo apt-get install libssl-dev
- xcodeinstruments 内存检测
http://blog.csdn.net/totogo2010/article/details/8233565
- ezdml设计数据库
数据结构和设计的介绍 ezdml软件:https://www.lanzous.com/i6ew2pe 1 用ezdml设计数据表然后导出到mysql数据库中 点击生成模型 2 选择库 3 点击开始生成
- Windows | Ubuntu 16.04/18.04 安装Pycharm并永久破解以及安装配置Anaconda3
Ubuntu 18.04下 1.安装python 2._版本,输入 sudo apt install python 命令行输入 python或python3会打开对应的版本. 输入 exit()或C ...
- @RequestMapping和@GetMapping和PostMapping
简介 - @GetMapping是一个组合注解,是@RequestMapping(method = RequestMethod.GET)的缩写.该注解将HTTP Get 映射到 特定的处理方法上. - ...
- USB摄像头驱动框架分析
usb摄像头驱动程序,里面涉及硬件的操作.比如说,想设置亮度的时候,需要把亮度的参数发给硬件.去得到真正视频数据的时候,需要访问硬件得到数据.usb摄像头驱动程序框架与虚拟摄像头驱动程序的框架是一样的 ...