vue.config.js加入devServer
const webpack = require('webpack')
module.exports = {
devServer: {
port: 8085, // 端口号
host: 'localhost',
https: false,
open: true // 配置是否自动启动浏览器
},
lintOnSave: false,
configureWebpack: {
plugins: [
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
"windows.jQuery": "jquery"
})
]
}
}
eslint常常会有很严格的代码规范,如果太麻烦或者有老代码的话,可以使用.eslintignore和.eslintrc.js文件进行忽略
.eslintignore
/dist/
*.js
.eslintrc.js
module.exports = {
root: true,
env: {
node: true,
jquery:true
},
'extends': [
'plugin:vue/essential',
'@vue/standard'
],
rules: {
/**
* 这里的数字:0表示不不处理,1表示警告,2表示错误
* */
"no-trailing-spaces": 0,//一行结束后面不要有空格
"no-multiple-empty-lines": 0,//不能有空行
"brace-style": 0, // if while function 后面的{必须与if在同一行,java风格。
"indent": 0,//缩进风格
"padded-blocks": 0,// 块语句内行首行尾是否要空行,首位空行开启规则则为非法
"keyword-spacing": 0, //关键字是否需要带空格,if(L < 0)开启规则则为非法,需要在if后加上空格if (L < 0)
"space-in-parens": 0,//小括号里面要不要有空格 if ( L < 0 )开启规则则为非法,需要去除空格if (L < 0)
"space-infix-ops": 0,//中缀操作符周围要不要有空格,let a=null;开启规则则为非法,需要在=前后加空格let a = null;
"space-before-blocks": 0,//不以新行开始的块{前面要不要有空格function a (){}开启规则则为非法,需要在{前加空格function a () {}
"space-before-function-paren": 0,//函数定义时括号(前面要不要有空格,function a(){}开启规则则为非法,需要在括号(前加空格function a (){}
"spaced-comment": 0,//注释符号后是否需要空格 //test 和/*test*/开启规则则为非法,需要加上空格// test 和/* test */
"comma-dangle": 0, // 数组和对象键值对最后一个逗号 {a:1, b:2,}开启规则则为非法,需要去除最后一个逗号{a:1, b:2}
"object-curly-spacing": 0, // 大括号内是否需要前后空格 {a:1,b:2}开启规则则为非法,大括号内前后需要加上空格{ a:1,b:2 }
"standard/object-curly-even-spacing": 0, // 大括号内是否可以奇数个空格需要前后空格 { a:1,b:2}开启规则则为非法,大括号加上或去掉一个空格{ a:1,b:2 }或{a:1,b:2}
"vue/no-use-v-if-with-v-for": 0, // 去除不能同时使用v-for和v-if的警告
"vue/require-v-for-key": 0, // v-for语句中是否必须要有key
"comma-spacing": 0, // 控制逗号前后的空格 {a:1,b:0}开启规则则为非法,逗号之后需要控告{a:1, b:0}
"key-spacing": 0,//对象字面量中冒号的前后空格{a:1}开启规则则为非法,冒号之后需要空格{a: 1}
"no-unused-vars": 0, // 不能有声明后未被使用的变量或参数,开启规则则后,定义变量后不使用为非法
"semi": 0, //语句结尾不需要分号结尾,let a = null;开启规则则后非法,需要去除分号
'quotes': 0, //是否限制引号类型
"no-multi-spaces": 0,//不能用多余的空格
'no-console': 0,
'no-debugger': 0,
"no-irregular-whitespace": 0
},
parserOptions: {
parser: 'babel-eslint'
}
}
export default {
install (Vue, options) {
/**
* 系统信息
* onlineTime 系统上线时间报警提示信息
* timesColor 柱状图时间段颜色,工作时间、加班时间、非工作时间
* */
Vue.prototype.system = {
onlineTime: "2019/08/20",
serverUrl: "http://202.38.213.106:8086/suct",
startYear: 2017,
postDataDate: "2018",
projectId: "00006",
};
/**
* 获取每月的天数
* */
Vue.prototype.mGetDate = function (year, month) {
var d = new Date(year, month, 0);
return d.getDate();
}
}
}
import base from './api/global'
Vue.use(base)
<template>
<div>
{{system.onlineTime}}
</div>
</template>
this.mGetDate(2019,8)
解决使用动态路由时,页面刷新路由丢失问题
sessionStorage.setItem("privilege", JSON.stringify(privilegeArr));
在重载路由时同时可以判断token及登录超时
main.js
let data = JSON.parse(sessionStorage.getItem('privilege')); //登陆并获取了权限
let fristLoginDate = sessionStorage.getItem('date'); //上次登录时间戳,用于超时判断
if (data){
//这里是防止用户手动刷新页面,整个app要重新加载,动态新增的路由,会消失,所以我们重新add一次
let cDate = Date.parse(new Date()); //当前时间戳
let timeout = 1000 * 60 * 60 * 24; /*超时时间*/
if( (cDate - Number(fristLoginDate)) > timeout){
router.push({path:"/logout"});
}else{
let routes = []
MenuUtils(routes,data)
router.addRoutes(routes)
}
}
else{
router.push({path:"/logout"});
}
router.beforeEach((route, redirect, next) => {
let data = (sessionStorage.getItem('token'));
if (!data && route.path !== '/login') {
next({ path: '/logout' })
} else {
if (route.path) {
next()
} else {
next({ path: '/logout' })
}
}
})
配置输出文件夹及资源文件夹
vue.config
outputDir: 'dist', // 输出文件目录
assetsDir: 'static', // 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。
其中assetsDir是否配置的差别如下:
配置前
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oAB2Qmlw-1575877421814)(index_files/f73d58f2-6f5c-4c93-a7ae-00bdcd66872a.png)]
配置后
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sW5y2S6f-1575877421816)(index_files/48ecbd28-ada4-4630-9f5f-610df044e9a5.png)]
需要使用页面打开pdf文件,又不想使用pdfjs时,可以通过配置url-loader来实现
vue.config
const webpack = require('webpack')
module.exports = {
publicPath: process.env.NODE_ENV === "production" ? "/threeTest/" : "/",
outputDir: 'dist', // 输出文件目录
assetsDir: 'static', // 放置生成的静态资源 (js、css、img、fonts) 的 (相对于 outputDir 的) 目录。
devServer: {
port: 8080, // 端口号
https: false,
open: true // 配置是否自动启动浏览器
},
lintOnSave: process.env.NODE_ENV !== 'production',
configureWebpack: {
plugins: [
new webpack.ProvidePlugin({
$: "jquery",
jQuery: "jquery",
"windows.jQuery": "jquery"
})
]
},
// 配置pdf rule
chainWebpack:config => {
config.module
.rule('pdf')
.test(/\.(pdf|PDF)(\?.*)?$/)
.use('url-loader')
.loader('url-loader')
.tap(options => {
// 修改它的选项...
return {
limit: 10000,
fallback: {
loader: 'file-loader',
options: {
name: 'static/pdf/[name].[hash:8].[ext]'
}
}
}
})
.end()
}
}
控制台输入命令 vue inspect > output.js
拿到解析好的 webpack 配置
打开 output.js
文件查看是否配置成功
/* config.module.rule('pdf') */
{
test: /\.(pdf|PDF)(\?.*)?$/,
use: [
{
loader: 'url-loader',
options: {
limit: 10000,
fallback: {
loader: 'file-loader',
options: {
name: 'static/pdf/[name].[hash:8].[ext]'
}
}
}
}
]
}