搜索词>>router 耗时0.0040
  • vue-router 中 routers 定义写法

    vue-router 中 routers 定义写法,讨论 require 的使用与否​首先上 router的index.jsimport Vue from 'vue' import Router from 'vue-router' //首页vue-router 中 routers 定义写法,讨论 require 的使用与否​首先上 router的index.jsimport Vue from 'vue' import Router from 'vue-router' //首页 //import index from '@/components/index' //产品中心 import productCenter from '@/components/productCenter/productCenter.vue' //商务合作 import teamwork from '@/components/teamwork/teamwork.vue' //咨询中心 import askCenter from '@/components/askCenter/askCenter.vue' //关于中棋 import aboutUs from '@/components/aboutUs/aboutUs.vue' Vue.use(Router) export default new Router({ routes: [ //首页 { path: '/', name: 'index', component:resolve =>require(['index'],resolve) } //产品中心 ,{ path: '/productCenter', name: 'productCenter', component: productCenter } //商务合作 ,{ path: '/teamwork', name: 'teamwork', component: teamwork } //咨询中心 ,{ path: '/askCenter', name: 'askCenter', component: askCenter } //关于我们 ,{ path: '/aboutUs', name: 'aboutUs', component: aboutUs } ] }) 重点说明:提示:import 引入时用到的“@”就相当于“..”;我们看到index页面是用的require的方式写的路由,所以上面的import就注释掉了,这种写法的好处,不仅仅是简单,还有这样写是按需加载,访问此路由时才加载这个js,会避免进入首页时加载内容过多,因为import引入,当项目打包时路由里的所有component都会打包在一个js中,而用require会将你的component分别打包成不同的js。最后总结:推荐使用require 方式编写routers,按需加载节约资源。 图像 小部件
  • vue-router传递参数

           一、vue-router路由跳转分为两大类编程式的跳转:router.push声明式的跳转:<router-link>l;二、编程式的跳转分为三种1、this.$router.push("detail"):detail为要跳转的路       一、vue-router路由跳转分为两大类编程式的跳转:router.push声明式的跳转:<router-link>二、编程式的跳转分为三种1、this.$router.push("detail"):detail为要跳转的路由地址,该方式简单但无法传递参数。2、this.$router.push({name:"detail",params:{personId:33}}):detail为要跳转的路由地址,params为传递的参数,目标页面可以使用this.$route.params.personId来获取传递的参数,该方式有一个缺点就是在目标页面刷新时传递过来的参数会丢失。3、this.$router.push({path:"/detail",query:{personId:33}}):detail为要跳转的路由地址,query为传递的参数,目标页面使用this.$route.query.personId来获取传递的参数,该方式会把传递的参数放在url上,如:localhost:8080/#/detail/?personId=33。(该方式也称为地址栏传参)注意!!!获取参数是 this.$route.query.** 或者this.$route.params.****使用this.$router.query.**/params.***是无法获取到参数的三、声明式的跳转分为三种(优缺点与编程式相同)<router-link to="detail">跳转到详情页</router-link><router-link :to="{name:'detail',params:{personId:33}}">跳转到详情页</router-link><router-link :to="{path:'/detail',query:{personId:33}}">跳转到详情页</router-link>
  • vue router中meta元素使用

    meta字段(元数据)直接在路由配置的时候,给每个路由添加一个自定义的meta对象,在meta对象中可以设置一些状态,来进行一些操作meta字段(元数据)直接在路由配置的时候,给每个路由添加一个自定义的meta对象,在meta对象中可以设置一些状态,来进行一些操作。用它来做登录校验再合适不过了{ path: '/actile', name: 'Actile', component: Actile, meta: { login_require: false }, }, { path: '/goodslist', name: 'goodslist', component: Goodslist, meta: { login_require: true }, children:[ { path: 'online', component: GoodslistOnline } ] }这里我们只需要判断item下面的meta对象中的login_require是不是true,就可以做一些限制了router.beforeEach((to, from, next) => { if (to.matched.some(function (item) { return item.meta.login_require })) { next('/login') } else next() })代码段 小部件
  • Vue 登录后返回上一页完美解决办法

    Vue 如何返回上一页(上一个锚点)//...省略 methods:{ goback:function(){ this.$router.go(-1);//返回上一页 } } //...省略注意Vue 如何返回上一页(上一个锚点)//...省略 methods:{ goback:function(){ this.$router.go(-1);//返回上一页 } } //...省略注意:前提是使用了Vue 的route组件
  • Vue route路由跳转及传参

    一、如何在vue中使用route跳转页面并传递参数this.$router.push({ path: '/path/to/your',query:{param1:value1,param2:value2}});一、如何在vue中使用route跳转页面并传递参数this.$router.push({ path: '/path/to/your',query:{param1:value1,param2:value2}});
  • Vue 2.0项目配置CDN服务解决加载慢问题

    vue打包会把vue相关的组件打包到一个文件vendor.*.js(*是个随机数)步骤一 资源引入vue最外层index.html文件引入资源文<body>l;     <div id="app">l;</div>l;       <script srvue打包会把vue相关的组件打包到一个文件vendor.*.js(*是个随机数)步骤一 资源引入vue最外层index.html文件引入资源文<body>     <div id="app"></div>       <script src="https://cdn.bootcss.com/vue/2.5.2/vue.min.js"></script>     <script src="https://cdn.bootcss.com/vue-router/3.0.1/vue-router.min.js"></script>     <script src="https://cdn.bootcss.com/vuex/3.0.1/vuex.min.js"></script> </body>步骤二 添加配置在bulid/webpack.base.conf.js文件中,增加externals,将引用的外部模块导入,如下:module.exports = {   entry: {     app: './src/main.js'   },   externals:{     'vue': 'Vue',     'vue-router': 'VueRouter',     'vuex':'Vuex'   }  【注意】 externals的key:value不要随便修改,暂时理解为 key是npm安装使用的名称,value为组件对外提供的名称不可随意更改(打开组件源码可见)步骤三 去掉原有的引用1.main.js  文件中注释掉vue // import Vue from 'vue'2.router--> index.js  文件中注释掉 vue和 vue-router:// import Vue from 'vue' // import VueRouter from 'vue-router'3.修改名vue 使用路由配置为以下Vue.use(VueRouter)
  • Vue中main.js App.vue index.html之间关系

    在初始化的Vue项目中,我们最先接触到的就是main.js,App.vue,index.html这三个文件,从下面创建的一个空白项目中可以看到:​关于三个文件的说明如下:index.html---主页,项目入口App.vue---根组件ma在初始化的Vue项目中,我们最先接触到的就是main.js,App.vue,index.html这三个文件,从下面创建的一个空白项目中可以看到:​关于三个文件的说明如下:index.html---主页,项目入口App.vue---根组件main.js---入口文件那么这几个文件之间的联系如何呢?1.先看index.html中的内容:(为了很好的识别各个文件,我对各文件内容进行了文字标记)<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>vue-start|来自index.html的标题</title> </head> <body> <div id="app"> 来自index.html的内容 </div> <!-- built files will be auto injected --> </body> </html> 2.在App.vue中,我做了如下处理:<template> <div id="app"> <img src="./assets/logo.png"> <div>来自App.vue的内容</div> <!--<router-view/>--> </div> </template> <script> export default { name: 'App' } </script> <style> #app { font-family: 'Avenir', Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; text-align: center; color: #2c3e50; margin-top: 60px; } </style> 3.在main.js中,文件初始内容如下:// The Vue build version to load with the `import` command // (runtime-only or standalone) has been set in webpack.base.conf with an alias. import Vue from 'vue' import App from './App' import router from './router' Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ el: '#app', router, components: { App }, template: '<App/>' })  接下来运行这个项目,观察显示网页效果如下: ​也就是说,在网页的Title部分,加载了index.html中定义的Title,而在正文部分,加载了App.vue中定义的部分。(但是需要注意的是,在浏览器打开的瞬间,浏览器中正文部分会瞬间显示index.html中定义的正文部分)那么,我们就可以来分析上述的逻辑了,浏览器访问项目,最先访问的是index.html文件,而index.html中 <div id="app"> 来自index.html的内容 </div>上面有一个id为app的挂载点,之后我们的Vue根实例就会挂载到该挂载点上; main.js作为项目的入口文件,在main.js中,新建了一个Vue实例,在Vue实例中,通过new Vue({ el: '#app', router, components: { App }, template: '<App/>' })告诉该实例要挂载的地方;(即实例装载到index.html中的位置)接着,实例中注册了一个局部组件App,这个局部组件App来自于哪儿呢? import App from './App' Vue.config.productionTip = false /* eslint-disable no-new */ new Vue({ el: '#app', router, components: { App }, template: '<App/>' })这个局部组件是当前目录下的App.vue;模板就是组件App.vue中的template中的内容。(template会替代原来的的挂载点处的内容) 所以Vue这个实例就是展示的是App.vue这个组件的内容。 总结:在项目运行中,main.js作为项目的入口文件,运行中,找到其实例需要挂载的位置,即index.html中,刚开始,index.html的挂载点处的内容会被显示,但是随后就被实例中的组件中的模板中的内容所取代,所以我们会看到有那么一瞬间会显示出index.html中正文的内容。而index.html中的Title部分不会被取代,所以会一直保留。
  • Vue.js底部导航三种写法

    普通写法​vantUI 使用字体图标和文字<template>l; <van-tabbar v-model="active" active-color="#07c160">l; <van-tabbar-item :to="{普通写法​vantUI 使用字体图标和文字<template> <van-tabbar v-model="active" active-color="#07c160"> <van-tabbar-item :to="{name:'home'}"> <span>首页</span> <img slot="icon" slot-scope="props" :src="props.active ? icon.homeActive : icon.homeNormal" > </van-tabbar-item> <van-tabbar-item :to="{name:'money'}"> <span>钱包</span> <img slot="icon" slot-scope="props" :src="props.active ? icon.moneyActive : icon.moneyNormal" > </van-tabbar-item> <van-tabbar-item :to="{name:'user'}"> <span>个人中心</span> <img slot="icon" slot-scope="props" :src="props.active ? icon.userActive : icon.userNormal" > </van-tabbar-item> </van-tabbar> </template> <script> export default { data() { return { active: 0, icon:{ homeNormal: require('./home.png'), homeActive: require('./homeActive.png'), moneyNormal: require('./money.png'), moneyActive: require('./moneyActive.png'), userNormal: require('./user.png'), userActive: require('./userActive.png'), }, } } } </script>手写 适用于背景图等复杂样式<template> <div class="footer"> <div class="foot"> <router-link v-for="(item,i) in footnavs" :key="i" :to="item.to" :class="{'selected':($route.meta.nav_index==item.nav_index)}" > <img :src="$route.meta.nav_index==item.nav_index?item.selected:item.no_selected" alt> <span v-show="!($route.meta.nav_index==item.nav_index)">{{item.name}}</span> </router-link> </div> </div> </template> <script> export default { data() { return { footnavs: [ { to: "/", name: "首页", no_selected: require("@img/home/shouye@2x.png"), selected: require("@img/home/shouye2@2x.png"), nav_index: 1 }, { to: "/money", name: "钱包", no_selected: require("@img/home/qianbao@2x.png"), selected: require("@img/home/qianbao2@2x.png"), nav_index: 2 }, { to: "/my", name: "个人中心", no_selected: require("@img/home/gerenhzongxin@2x.png"), selected: require("@img/home/gerenzhongxin@2x.png"), nav_index: 3 } ] }; } }; </script> <style lang="less" scoped> .footer { width: 100%; height: 98px; margin-top: 12px; .foot { width: 100%; position: fixed; left: 0; right: 0; bottom: 0; display: flex; justify-content: space-between; padding: 10px 20px; background: rgba(255, 255, 255, 1); box-shadow: 0px 1px 16px 0px rgba(192, 192, 192, 0.4); a { width: 33%; text-align: center; display: flex; flex-direction: column; justify-content: space-around; align-items: center; img { width: 47px; height: 47px; } span { font-size: 28px; color: rgba(102, 102, 102, 1); } &.selected { img { width: 85px; height: 85px; } } } } } </style>路由文件import Vue from 'vue' import Router from 'vue-router' import home from '@/pages/home/home' import noticeList from '@/pages/home/noticeList' import money from '@/pages/money/money' import my from '@/pages/my/my' Vue.use(Router) export default new Router({ routes: [{ path: '/', name: 'home', component: home, meta: { index: 0, hasFooter: true, nav_index: 1 }, }, { path: '/money', name: 'money', component: money, meta: { index: 0, hasFooter: true, nav_index: 2 }, }, { path: '/my', name: 'my', component: my, meta: { index: 0, hasFooter: true, nav_index: 3 }, }, { path: '/noticeList', name: 'noticeList', component: noticeList, meta: { index: 1, hasBar: true, }, }, ], //该方法用于控制滚动行为, scrollBehavior(to, form, savedPosition) { if (savedPosition) { return savedPosition } else { return { x: 0, y: 0 } } } })app.vue文件<template> <div id="app"> <tabBar v-show="$route.meta.hasBar"/> <transition :name="transitionName"> <router-view/> </transition> <Footer v-show="$route.meta.hasFooter"/> </div> </template> <script> import "./common/css/common.css"; // bug:不能为小写footer会报错 import Footer from "@/components/footer"; import tabBar from "@/components/tabBar"; export default { name: "App", data() { return { transitionName: "" }; }, components: { Footer, tabBar }, mounted() {}, watch: { /* * 使用watch 监听$router的变化 * 如果to索引大于from索引,判断为前进状态,反之则为后退状态 * 设置动画名称 */ $route(to, from) { if (to.meta.index == from.meta.index) { this.transitionName = ""; } else if (to.meta.index > from.meta.index) { this.transitionName = "slide-left"; } else { this.transitionName = "slide-right"; } } } }; </script>​​​​​​​
  • xcopy 复制点(.)开头的隐藏文件到用户主目录

    xcopy 复制点(.)开头的隐藏文件到用户主目录,bat如何获取用户主目录?点开头的文件夹如何用xcopy复制<h2>背景</h2> 博主为了复制个点开头的文件夹到c盘的用户主目录中,查询百度无果,然去Google了一把居然也无果。可能是大佬们都瞧不起这种入门的操作。<br /> <br /> 特怒鲁了这篇博客作为记录: <h2>1.window/bat/cmd如何获取用户主目录路径</h2> <br /> 这个问题百度还是有结果的。但是还是要记录下 <pre> <code class="language-bash">set userPath=%userprofile%</code></pre> <h2>2xcopy如何安静的复制点开头的文件夹</h2> <pre> <code class="language-html">xcopy .WebStorm2018.1 %userprofile%\.WebStorm2018.1\ /E /H /Y</code></pre> 这个操作就是把当前目录下的[.WebStorm2018.1]文件夹复制到用户主目录中<br /> <br /> 例如把WebStorm2018.1的配置文件复制到用户主目录中: <pre> <code class="language-html">@echo off xcopy .WebStorm2018.1 %userprofile%\.WebStorm2018.1\ /E /H /Y echo "Success" pause</code></pre> 执行部分输出: <pre> <code class="language-html">.WebStorm2018.1\system\index\registered .WebStorm2018.1\system\index\rep.names .WebStorm2018.1\system\index\rep.names.keystream .WebStorm2018.1\system\index\rep.names.keystream.len .WebStorm2018.1\system\index\rep.names.len .WebStorm2018.1\system\index\rep.names_i .WebStorm2018.1\system\index\rep.names_i.len .WebStorm2018.1\system\index\.persistent\hashesWithFileType .WebStorm2018.1\system\index\.persistent\hashesWithFileType.len .WebStorm2018.1\system\index\.persistent\duplicatesindex\values .WebStorm2018.1\system\index\.persistent\duplicatesindex\values.len .WebStorm2018.1\system\index\.persistent\idindex\values .WebStorm2018.1\system\index\.persistent\idindex\values.len .WebStorm2018.1\system\index\.persistent\todoindex\values .WebStorm2018.1\system\index\.persistent\todoindex\values.len .WebStorm2018.1\system\index\.persistent\trigram.index\values .WebStorm2018.1\system\index\.persistent\trigram.index\values.len .WebStorm2018.1\system\index\angularjs.app.index\angularjs.app.index.storage .WebStorm2018.1\system\index\angularjs.app.index\angularjs.app.index.storage.len .WebStorm2018.1\system\index\angularjs.app.index\angularjs.app.index.ver .WebStorm2018.1\system\index\angularjs.app.index\angularjs.app.index_inputs .WebStorm2018.1\system\index\angularjs.app.index\angularjs.app.index_inputs.len .WebStorm2018.1\system\index\angularjs.template.cache\angularjs.template.cache.storage .WebStorm2018.1\system\index\angularjs.template.cache\angularjs.template.cache.storage.len .WebStorm2018.1\system\index\angularjs.template.cache\angularjs.template.cache.ver .WebStorm2018.1\system\index\angularjs.template.cache\angularjs.template.cache_inputs .WebStorm2018.1\system\index\angularjs.template.cache\angularjs.template.cache_inputs.len .WebStorm2018.1\system\index\angularjs.ui.router.views.index\angularjs.ui.router.views.index.storage .WebStorm2018.1\system\index\angularjs.ui.router.views.index\angularjs.ui.router.views.index.storage.len .WebStorm2018.1\system\index\angularjs.ui.router.views.index\angularjs.ui.router.views.index.ver .WebStorm2018.1\system\index\angularjs.ui.router.views.index\angularjs.ui.router.views.index_inputs .WebStorm2018.1\system\index\angularjs.ui.router.views.index\angularjs.ui.router.views.index_inputs.len .WebStorm2018.1\system\index\compassfunctionsindex\CompassFunctionsIndex.storage .WebStorm2018.1\system\index\compassfunctionsindex\CompassFunctionsIndex.storage.len .WebStorm2018.1\system\index\compassfunctionsindex\CompassFunctionsIndex.ver .WebStorm2018.1\system\index\compassfunctionsindex\CompassFunctionsIndex_inputs .WebStorm2018.1\system\index\compassfunctionsindex\CompassFunctionsIndex_inputs.len .WebStorm2018.1\system\index\css.template.selectors\css.template.selectors.storage .WebStorm2018.1\system\index\css.template.selectors\css.template.selectors.storage.len .WebStorm2018.1\system\index\css.template.selectors\css.template.selectors.ver .WebStorm2018.1\system\index\css.template.selectors\css.template.selectors_inputs .WebStorm2018.1\system\index\css.template.selectors\css.template.selectors_inputs.len .WebStorm2018.1\system\index\cssindex\CssIndex.storage .WebStorm2018.1\system\index\cssindex\CssIndex.storage.len .WebStorm2018.1\system\index\cssindex\CssIndex.ver .WebStorm2018.1\system\index\cssindex\CssIndex_inputs .WebStorm2018.1\system\index\cssindex\CssIndex_inputs.len .WebStorm2018.1\system\index\dartclassindex\DartClassIndex.storage .WebStorm2018.1\system\index\dartclassindex\DartClassIndex.storage.len .WebStorm2018.1\system\index\dartclassindex\DartClassIndex.ver .WebStorm2018.1\system\index\dartclassindex\DartClassIndex_inputs .WebStorm2018.1\system\index\dartclassindex\DartClassIndex_inputs.len .WebStorm2018.1\system\index\dartcomponentindex\DartComponentIndex.storage .WebStorm2018.1\system\index\dartcomponentindex\DartComponentIndex.storage.len .WebStorm2018.1\system\index\dartcomponentindex\DartComponentIndex.ver .WebStorm2018.1\system\index\dartcomponentindex\DartComponentIndex_inputs .WebStorm2018.1\system\index\dartcomponentindex\DartComponentIndex_inputs.len .WebStorm2018.1\system\index\dartimportindex\DartImportIndex.storage .WebStorm2018.1\system\index\dartimportindex\DartImportIndex.storage.len .WebStorm2018.1\system\index\dartimportindex\DartImportIndex.ver .WebStorm2018.1\system\index\dartimportindex\DartImportIndex_inputs .WebStorm2018.1\system\index\dartimportindex\DartImportIndex_inputs.len .WebStorm2018.1\system\index\dartlibraryindex\DartLibraryIndex.storage .WebStorm2018.1\system\index\dartlibraryindex\DartLibraryIndex.storage.len .WebStorm2018.1\system\index\dartlibraryindex\DartLibraryIndex.ver .WebStorm2018.1\system\index\dartlibraryindex\DartLibraryIndex_inputs .WebStorm2018.1\system\index\dartlibraryindex\DartLibraryIndex_inputs.len .WebStorm2018.1\system\index\dartpathindex\DartPathIndex.storage .WebStorm2018.1\system\index\dartpathindex\DartPathIndex.storage.len .WebStorm2018.1\system\index\dartpathindex\DartPathIndex.ver .WebStorm2018.1\system\index\dartpathindex\DartPathIndex_inputs .WebStorm2018.1\system\index\dartpathindex\DartPathIndex_inputs.len .WebStorm2018.1\system\index\dartsymbolindex\DartSymbolIndex.storage .WebStorm2018.1\system\index\dartsymbolindex\DartSymbolIndex.storage.len .WebStorm2018.1\system\index\dartsymbolindex\DartSymbolIndex.ver .WebStorm2018.1\system\index\dartsymbolindex\DartSymbolIndex_inputs .WebStorm2018.1\system\index\dartsymbolindex\DartSymbolIndex_inputs.len .WebStorm2018.1\system\index\domfileindex\DomFileIndex.storage .WebStorm2018.1\system\index\domfileindex\DomFileIndex.storage.len .WebStorm2018.1\system\index\domfileindex\DomFileIndex.ver .WebStorm2018.1\system\index\domfileindex\DomFileIndex_inputs .WebStorm2018.1\system\index\domfileindex\DomFileIndex_inputs.len .WebStorm2018.1\system\index\duplicatesindex\DuplicatesIndex.storage .WebStorm2018.1\system\index\duplicatesindex\DuplicatesIndex.storage.len .WebStorm2018.1\system\index\duplicatesindex\DuplicatesIndex.ver .WebStorm2018.1\system\index\duplicatesindex\fileIdToHashId .WebStorm2018.1\system\index\duplicatesindex\fileIdToHashId.len .WebStorm2018.1\system\index\fileincludes\fileIncludes.storage .WebStorm2018.1\system\index\fileincludes\fileIncludes.storage.len .WebStorm2018.1\system\index\fileincludes\fileIncludes.ver .WebStorm2018.1\system\index\fileincludes\fileIncludes_inputs .WebStorm2018.1\system\index\fileincludes\fileIncludes_inputs.len .WebStorm2018.1\system\index\filenameindex\FilenameIndex.project .WebStorm2018.1\system\index\filenameindex\FilenameIndex.project.len .WebStorm2018.1\system\index\filenameindex\FilenameIndex.storage .WebStorm2018.1\system\index\filenameindex\FilenameIndex.storage.keystream .WebStorm2018.1\system\index\filenameindex\FilenameIndex.storage.keystream.len .WebStorm2018.1\system\index\filenameindex\FilenameIndex.storage.len .WebStorm2018.1\system\index\filenameindex\FilenameIndex.storage.values.at .WebStorm2018.1\system\index\filenameindex\FilenameIndex.storage_i .WebStorm2018.1\system\index\filenameindex\FilenameIndex.storage_i.len .WebStorm2018.1\system\index\filenameindex\FilenameIndex.ver .WebStorm2018.1\system\index\filenameindex\FilenameIndex_inputs .WebStorm2018.1\system\index\filenameindex\FilenameIndex_inputs.len .WebStorm2018.1\system\index\filenameindex\FilenameIndex_inputs.values.at .WebStorm2018.1\system\index\filenameindex\FilenameIndex_inputs_i .WebStorm2018.1\system\index\filenameindex\FilenameIndex_inputs_i.len .WebStorm2018.1\system\index\filetypes\filetypes.storage .WebStorm2018.1\system\index\filetypes\filetypes.storage.keystream .WebStorm2018.1\system\index\filetypes\filetypes.storage.keystream.len .WebStorm2018.1\system\index\filetypes\filetypes.storage.len .WebStorm2018.1\system\index\filetypes\filetypes.storage.values.at .WebStorm2018.1\system\index\filetypes\filetypes.storage_i .WebStorm2018.1\system\index\filetypes\filetypes.storage_i.len .WebStorm2018.1\system\index\filetypes\filetypes.ver .WebStorm2018.1\system\index\filetypes\filetypes_inputs .WebStorm2018.1\system\index\filetypes\filetypes_inputs.len .WebStorm2018.1\system\index\filetypes\filetypes_inputs.values.at .WebStorm2018.1\system\index\filetypes\filetypes_inputs_i .WebStorm2018.1\system\index\filetypes\filetypes_inputs_i.len .WebStorm2018.1\system\index\frameworkdetectionindex\FrameworkDetectionIndex.storage .WebStorm2018.1\system\index\frameworkdetectionindex\FrameworkDetectionIndex.storage.len .WebStorm2018.1\system\index\frameworkdetectionindex\FrameworkDetectionIndex.ver .WebStorm2018.1\system\index\frameworkdetectionindex\FrameworkDetectionIndex_inputs .WebStorm2018.1\system\index\frameworkdetectionindex\FrameworkDetectionIndex_inputs.len .WebStorm2018.1\system\index\html5.custom.attributes.index\html5.custom.attributes.index.storage .WebStorm2018.1\system\index\html5.custom.attributes.index\html5.custom.attributes.index.storage.len .WebStorm2018.1\system\index\html5.custom.attributes.index\html5.custom.attributes.index.ver .WebStorm2018.1\system\index\html5.custom.attributes.index\html5.custom.attributes.index_inputs .WebStorm2018.1\system\index\html5.custom.attributes.index\html5.custom.attributes.index_inputs.len .WebStorm2018.1\system\index\http.request.execution.environment\http.request.execution.environment.storage .WebStorm2018.1\system\index\http.request.execution.environment\http.request.execution.environment.storage.len .WebStorm2018.1\system\index\http.request.execution.environment\http.request.execution.environment.ver .WebStorm2018.1\system\index\http.request.execution.environment\http.request.execution.environment_inputs .WebStorm2018.1\system\index\http.request.execution.environment\http.request.execution.environment_inputs.len .WebStorm2018.1\system\index\idindex\fileIdToHashId .WebStorm2018.1\system\index\idindex\fileIdToHashId.len .WebStorm2018.1\system\index\idindex\IdIndex.storage .WebStorm2018.1\system\index\idindex\IdIndex.storage.len .WebStorm2018.1\system\index\idindex\IdIndex.ver .WebStorm2018.1\system\index\imagefileinfoindex\ImageFileInfoIndex.storage .WebStorm2018.1\system\index\imagefileinfoindex\ImageFileInfoIndex.storage.len .WebStorm2018.1\system\index\imagefileinfoindex\ImageFileInfoIndex.ver .WebStorm2018.1\system\index\imagefileinfoindex\ImageFileInfoIndex_inputs .WebStorm2018.1\system\index\imagefileinfoindex\ImageFileInfoIndex_inputs.len .WebStorm2018.1\system\index\js.custom.single.entry.index\js.custom.single.entry.index.storage .WebStorm2018.1\system\index\js.custom.single.entry.index\js.custom.single.entry.index.storage.len .WebStorm2018.1\system\index\js.custom.single.entry.index\js.custom.single.entry.index.ver .WebStorm2018.1\system\index\js.custom.single.entry.index\js.custom.single.entry.index_inputs .WebStorm2018.1\system\index\js.custom.single.entry.index\js.custom.single.entry.index_inputs.len .WebStorm2018.1\system\index\js.implicit.elements.index\js.implicit.elements.index.storage .WebStorm2018.1\system\index\js.implicit.elements.index\js.implicit.elements.index.storage.len .WebStorm2018.1\system\index\js.implicit.elements.index\js.implicit.elements.index.ver .WebStorm2018.1\system\index\js.implicit.elements.index\js.implicit.elements.index_inputs .WebStorm2018.1\system\index\js.implicit.elements.index\js.implicit.elements.index_inputs.len .WebStorm2018.1\system\index\js.package.index\js.package.index.storage .WebStorm2018.1\system\index\js.package.index\js.package.index.storage.len .WebStorm2018.1\system\index\js.package.index\js.package.index.ver .WebStorm2018.1\system\index\js.package.index\js.package.index_inputs .WebStorm2018.1\system\index\js.package.index\js.package.index_inputs.len .WebStorm2018.1\system\index\js.test.names\js.test.names.storage .WebStorm2018.1\system\index\js.test.names\js.test.names.storage.len .WebStorm2018.1\system\index\js.test.names\js.test.names.ver .WebStorm2018.1\system\index\js.test.names\js.test.names_inputs .WebStorm2018.1\system\index\js.test.names\js.test.names_inputs.len .WebStorm2018.1\system\index\meteortemplateindex\MeteorTemplateIndex.storage .WebStorm2018.1\system\index\meteortemplateindex\MeteorTemplateIndex.storage.len .WebStorm2018.1\system\index\meteortemplateindex\MeteorTemplateIndex.ver .WebStorm2018.1\system\index\meteortemplateindex\MeteorTemplateIndex_inputs .WebStorm2018.1\system\index\meteortemplateindex\MeteorTemplateIndex_inputs.len .WebStorm2018.1\system\index\relaxsymbolindex\RelaxSymbolIndex.storage .WebStorm2018.1\system\index\relaxsymbolindex\RelaxSymbolIndex.storage.len .WebStorm2018.1\system\index\relaxsymbolindex\RelaxSymbolIndex.ver .WebStorm2018.1\system\index\relaxsymbolindex\RelaxSymbolIndex_inputs .WebStorm2018.1\system\index\relaxsymbolindex\RelaxSymbolIndex_inputs.len .WebStorm2018.1\system\index\schematypeinheritance\SchemaTypeInheritance.storage .WebStorm2018.1\system\index\schematypeinheritance\SchemaTypeInheritance.storage.len .WebStorm2018.1\system\index\schematypeinheritance\SchemaTypeInheritance.ver .WebStorm2018.1\system\index\schematypeinheritance\SchemaTypeInheritance_inputs .WebStorm2018.1\system\index\schematypeinheritance\SchemaTypeInheritance_inputs.len .WebStorm2018.1\system\index\stubs\Stubs.storage .WebStorm2018.1\system\index\stubs\Stubs.storage.len .WebStorm2018.1\system\index\stubs\Stubs.ver .WebStorm2018.1\system\index\stubs\Stubs_inputs .WebStorm2018.1\system\index\stubs\Stubs_inputs.len .WebStorm2018.1\system\index\stubs\.fileTypes\indexed_filetypes .WebStorm2018.1\system\index\stubs\.versions\amd.baseUrl.index.ver .WebStorm2018.1\system\index\stubs\.versions\amd.requirePaths.index.ver .WebStorm2018.1\system\index\stubs\.versions\angularjs.controller.index.ver .WebStorm2018.1\system\index\stubs\.versions\angularjs.delimiter.index.ver .WebStorm2018.1\system\index\stubs\.versions\angularjs.directives.doc.index.ver .WebStorm2018.1\system\index\stubs\.versions\angularjs.directives.index.ver .WebStorm2018.1\system\index\stubs\.versions\angularjs.filter.index.ver .WebStorm2018.1\system\index\stubs\.versions\angularjs.generic.modules.index.ver .WebStorm2018.1\system\index\stubs\.versions\angularjs.module.index.ver .WebStorm2018.1\system\index\stubs\.versions\angularjs.symbol.index.ver .WebStorm2018.1\system\index\stubs\.versions\angularjs.ui.router.generic.states.index.ver .WebStorm2018.1\system\index\stubs\.versions\angularjs.ui.router.states.index.ver .WebStorm2018.1\system\index\stubs\.versions\Css.ampersand.selector.ver .WebStorm2018.1\system\index\stubs\.versions\Css.attr.ver .WebStorm2018.1\system\index\stubs\.versions\Css.class.ver .WebStorm2018.1\system\index\stubs\.versions\Css.custom.mixin.ver .WebStorm2018.1\system\index\stubs\.versions\Css.custom.property.ver .WebStorm2018.1\system\index\stubs\.versions\Css.id.ver .WebStorm2018.1\system\index\stubs\.versions\dom.elementClass.ver .WebStorm2018.1\system\index\stubs\.versions\dom.namespaceKey.ver .WebStorm2018.1\system\index\stubs\.versions\es6.assignment.index.ver .WebStorm2018.1\system\index\stubs\.versions\jade.mixin.ver .WebStorm2018.1\system\index\stubs\.versions\JS.base.types.index.ver .WebStorm2018.1\system\index\stubs\.versions\JS.class.implements.ver .WebStorm2018.1\system\index\stubs\.versions\js.class.index2.ver .WebStorm2018.1\system\index\stubs\.versions\JS.class.super.ver .WebStorm2018.1\system\index\stubs\.versions\JS.custom.stub.index.ver .WebStorm2018.1\system\index\stubs\.versions\js.doc.modules.ver .WebStorm2018.1\system\index\stubs\.versions\js.element.qualifiedName.ver .WebStorm2018.1\system\index\stubs\.versions\js.exported.index.ver .WebStorm2018.1\system\index\stubs\.versions\js.gcl.modules.ver .WebStorm2018.1\system\index\stubs\.versions\js.generics.index.ver .WebStorm2018.1\system\index\stubs\.versions\JS.global.qualified.elements.ver .WebStorm2018.1\system\index\stubs\.versions\js.global.symbol.index.ver .WebStorm2018.1\system\index\stubs\.versions\js.namespace.including.local.members.index.ver .WebStorm2018.1\system\index\stubs\.versions\js.namespace.index.ver .WebStorm2018.1\system\index\stubs\.versions\js.nonglobal.symbol.index.ver .WebStorm2018.1\system\index\stubs\.versions\js.qualified.shortName.ver .WebStorm2018.1\system\index\stubs\.versions\JS.subclass.stub.index.ver .WebStorm2018.1\system\index\stubs\.versions\js.symbol.index2.ver .WebStorm2018.1\system\index\stubs\.versions\js.symbol.qualified.names.index.ver .WebStorm2018.1\system\index\stubs\.versions\js.typedef.index2.ver .WebStorm2018.1\system\index\stubs\.versions\Less.mixins.ver .WebStorm2018.1\system\index\stubs\.versions\Less.variables.ver .WebStorm2018.1\system\index\stubs\.versions\Scss.function.ver .WebStorm2018.1\system\index\stubs\.versions\Scss.mixin.ver .WebStorm2018.1\system\index\stubs\.versions\Scss.placeholder.selector.ver .WebStorm2018.1\system\index\stubs\.versions\Scss.variable.ver .WebStorm2018.1\system\index\stubs\.versions\Stylus.mixins.ver .WebStorm2018.1\system\index\stubs\.versions\Stylus.variables.ver .WebStorm2018.1\system\index\stubs\.versions\ts.external.module.index.ver .WebStorm2018.1\system\index\stubs\.versions\ts.local.classes.ver .WebStorm2018.1\system\index\stubs\.versions\vue.components.index.ver .WebStorm2018.1\system\index\stubs\.versions\vue.global.directives.index.ver .WebStorm2018.1\system\index\stubs\.versions\vue.local.directives.index.ver .WebStorm2018.1\system\index\stubs\.versions\vue.mixin.binding.index.ver .WebStorm2018.1\system\index\stubs\.versions\vue.options.index.ver .WebStorm2018.1\system\index\stubs\amd.baseurl.index\amd.baseUrl.index.storage .WebStorm2018.1\system\index\stubs\amd.baseurl.index\amd.baseUrl.index.storage.len .WebStorm2018.1\system\index\stubs\amd.requirepaths.index\amd.requirePaths.index.storage .WebStorm2018.1\system\index\stubs\amd.requirepaths.index\amd.requirePaths.index.storage.len .WebStorm2018.1\system\index\stubs\angularjs.controller.index\angularjs.controller.index.storage .WebStorm2018.1\system\index\stubs\angularjs.controller.index\angularjs.controller.index.storage.len .WebStorm2018.1\system\index\stubs\angularjs.delimiter.index\angularjs.delimiter.index.storage .WebStorm2018.1\system\index\stubs\angularjs.delimiter.index\angularjs.delimiter.index.storage.len .WebStorm2018.1\system\index\stubs\angularjs.directives.doc.index\angularjs.directives.doc.index.storage .WebStorm2018.1\system\index\stubs\angularjs.directives.doc.index\angularjs.directives.doc.index.storage.len .WebStorm2018.1\system\index\stubs\angularjs.directives.index\angularjs.directives.index.storage .WebStorm2018.1\system\index\stubs\angularjs.directives.index\angularjs.directives.index.storage.len .WebStorm2018.1\system\index\stubs\angularjs.filter.index\angularjs.filter.index.storage .WebStorm2018.1\system\index\stubs\angularjs.filter.index\angularjs.filter.index.storage.len .WebStorm2018.1\system\index\stubs\angularjs.generic.modules.index\angularjs.generic.modules.index.storage .WebStorm2018.1\system\index\stubs\angularjs.generic.modules.index\angularjs.generic.modules.index.storage.len .WebStorm2018.1\system\index\stubs\angularjs.module.index\angularjs.module.index.storage .WebStorm2018.1\system\index\stubs\angularjs.module.index\angularjs.module.index.storage.len .WebStorm2018.1\system\index\stubs\angularjs.symbol.index\angularjs.symbol.index.storage .WebStorm2018.1\system\index\stubs\angularjs.symbol.index\angularjs.symbol.index.storage.len .WebStorm2018.1\system\index\stubs\angularjs.ui.router.generic.states.index\angularjs.ui.router.generic.states.index.storage .WebStorm2018.1\system\index\stubs\angularjs.ui.router.generic.states.index\angularjs.ui.router.generic.states.index.storage.len .WebStorm2018.1\system\index\stubs\angularjs.ui.router.states.index\angularjs.ui.router.states.index.storage .WebStorm2018.1\system\index\stubs\angularjs.ui.router.states.index\angularjs.ui.router.states.index.storage.len .WebStorm2018.1\system\index\stubs\css.ampersand.selector\Css.ampersand.selector.storage .WebStorm2018.1\system\index\stubs\css.ampersand.selector\Css.ampersand.selector.storage.len .WebStorm2018.1\system\index\stubs\css.attr\Css.attr.storage .WebStorm2018.1\system\index\stubs\css.attr\Css.attr.storage.len .WebStorm2018.1\system\index\stubs\css.class\Css.class.storage .WebStorm2018.1\system\index\stubs\css.class\Css.class.storage.len .WebStorm2018.1\system\index\stubs\css.custom.mixin\Css.custom.mixin.storage .WebStorm2018.1\system\index\stubs\css.custom.mixin\Css.custom.mixin.storage.len .WebStorm2018.1\system\index\stubs\css.custom.property\Css.custom.property.storage .WebStorm2018.1\system\index\stubs\css.custom.property\Css.custom.property.storage.len .WebStorm2018.1\system\index\stubs\css.id\Css.id.storage .WebStorm2018.1\system\index\stubs\css.id\Css.id.storage.len .WebStorm2018.1\system\index\stubs\dom.elementclass\dom.elementClass.storage .WebStorm2018.1\system\index\stubs\dom.elementclass\dom.elementClass.storage.len .WebStorm2018.1\system\index\stubs\dom.namespacekey\dom.namespaceKey.storage .WebStorm2018.1\system\index\stubs\dom.namespacekey\dom.namespaceKey.storage.len .WebStorm2018.1\system\index\stubs\es6.assignment.index\es6.assignment.index.storage .WebStorm2018.1\system\index\stubs\es6.assignment.index\es6.assignment.index.storage.len .WebStorm2018.1\system\index\stubs\jade.mixin\jade.mixin.storage .WebStorm2018.1\system\index\stubs\jade.mixin\jade.mixin.storage.len .WebStorm2018.1\system\index\stubs\js.base.types.index\JS.base.types.index.storage .WebStorm2018.1\system\index\stubs\js.base.types.index\JS.base.types.index.storage.len .WebStorm2018.1\system\index\stubs\js.class.implements\JS.class.implements.storage .WebStorm2018.1\system\index\stubs\js.class.implements\JS.class.implements.storage.len .WebStorm2018.1\system\index\stubs\js.class.index2\js.class.index2.storage .WebStorm2018.1\system\index\stubs\js.class.index2\js.class.index2.storage.len .WebStorm2018.1\system\index\stubs\js.class.super\JS.class.super.storage .WebStorm2018.1\system\index\stubs\js.class.super\JS.class.super.storage.len .WebStorm2018.1\system\index\stubs\js.custom.stub.index\JS.custom.stub.index.storage .WebStorm2018.1\system\index\stubs\js.custom.stub.index\JS.custom.stub.index.storage.len .WebStorm2018.1\system\index\stubs\js.doc.modules\js.doc.modules.storage .WebStorm2018.1\system\index\stubs\js.doc.modules\js.doc.modules.storage.len .WebStorm2018.1\system\index\stubs\js.element.qualifiedname\js.element.qualifiedName.storage .WebStorm2018.1\system\index\stubs\js.element.qualifiedname\js.element.qualifiedName.storage.len .WebStorm2018.1\system\index\stubs\js.exported.index\js.exported.index.storage .WebStorm2018.1\system\index\stubs\js.exported.index\js.exported.index.storage.len .WebStorm2018.1\system\index\stubs\js.gcl.modules\js.gcl.modules.storage .WebStorm2018.1\system\index\stubs\js.gcl.modules\js.gcl.modules.storage.len .WebStorm2018.1\system\index\stubs\js.generics.index\js.generics.index.storage .WebStorm2018.1\system\index\stubs\js.generics.index\js.generics.index.storage.len .WebStorm2018.1\system\index\stubs\js.global.qualified.elements\JS.global.qualified.elements.storage .WebStorm2018.1\system\index\stubs\js.global.qualified.elements\JS.global.qualified.elements.storage.len .WebStorm2018.1\system\index\stubs\js.global.symbol.index\js.global.symbol.index.storage .WebStorm2018.1\system\index\stubs\js.global.symbol.index\js.global.symbol.index.storage.len .WebStorm2018.1\system\index\stubs\js.namespace.including.local.members.index\js.namespace.including.local.members.index.storage .WebStorm2018.1\system\index\stubs\js.namespace.including.local.members.index\js.namespace.including.local.members.index.storage.len .WebStorm2018.1\system\index\stubs\js.namespace.index\js.namespace.index.storage .WebStorm2018.1\system\index\stubs\js.namespace.index\js.namespace.index.storage.len .WebStorm2018.1\system\index\stubs\js.nonglobal.symbol.index\js.nonglobal.symbol.index.storage .WebStorm2018.1\system\index\stubs\js.nonglobal.symbol.index\js.nonglobal.symbol.index.storage.len .WebStorm2018.1\system\index\stubs\js.qualified.shortname\js.qualified.shortName.storage .WebStorm2018.1\system\index\stubs\js.qualified.shortname\js.qualified.shortName.storage.len .WebStorm2018.1\system\index\stubs\js.subclass.stub.index\JS.subclass.stub.index.storage .WebStorm2018.1\system\index\stubs\js.subclass.stub.index\JS.subclass.stub.index.storage.len .WebStorm2018.1\system\index\stubs\js.symbol.index2\js.symbol.index2.storage .WebStorm2018.1\system\index\stubs\js.symbol.index2\js.symbol.index2.storage.len .WebStorm2018.1\system\index\stubs\js.symbol.qualified.names.index\js.symbol.qualified.names.index.storage .WebStorm2018.1\system\index\stubs\js.symbol.qualified.names.index\js.symbol.qualified.names.index.storage.len .WebStorm2018.1\system\index\stubs\js.typedef.index2\js.typedef.index2.storage .WebStorm2018.1\system\index\stubs\js.typedef.index2\js.typedef.index2.storage.len .WebStorm2018.1\system\index\stubs\less.mixins\Less.mixins.storage .WebStorm2018.1\system\index\stubs\less.mixins\Less.mixins.storage.len .WebStorm2018.1\system\index\stubs\less.variables\Less.variables.storage .WebStorm2018.1\system\index\stubs\less.variables\Less.variables.storage.len .WebStorm2018.1\system\index\stubs\scss.function\Scss.function.storage .WebStorm2018.1\system\index\stubs\scss.function\Scss.function.storage.len .WebStorm2018.1\system\index\stubs\scss.mixin\Scss.mixin.storage .WebStorm2018.1\system\index\stubs\scss.mixin\Scss.mixin.storage.len .WebStorm2018.1\system\index\stubs\scss.placeholder.selector\Scss.placeholder.selector.storage .WebStorm2018.1\system\index\stubs\scss.placeholder.selector\Scss.placeholder.selector.storage.len .WebStorm2018.1\system\index\stubs\scss.variable\Scss.variable.storage .WebStorm2018.1\system\index\stubs\scss.variable\Scss.variable.storage.len .WebStorm2018.1\system\index\stubs\stylus.mixins\Stylus.mixins.storage .WebStorm2018.1\system\index\stubs\stylus.mixins\Stylus.mixins.storage.len .WebStorm2018.1\system\index\stubs\stylus.variables\Stylus.variables.storage .WebStorm2018.1\system\index\stubs\stylus.variables\Stylus.variables.storage.len .WebStorm2018.1\system\index\stubs\ts.external.module.index\ts.external.module.index.storage .WebStorm2018.1\system\index\stubs\ts.external.module.index\ts.external.module.index.storage.len .WebStorm2018.1\system\index\stubs\ts.local.classes\ts.local.classes.storage .WebStorm2018.1\system\index\stubs\ts.local.classes\ts.local.classes.storage.len .WebStorm2018.1\system\index\stubs\vue.components.index\vue.components.index.storage .WebStorm2018.1\system\index\stubs\vue.components.index\vue.components.index.storage.len .WebStorm2018.1\system\index\stubs\vue.global.directives.index\vue.global.directives.index.storage .WebStorm2018.1\system\index\stubs\vue.global.directives.index\vue.global.directives.index.storage.len .WebStorm2018.1\system\index\stubs\vue.local.directives.index\vue.local.directives.index.storage .WebStorm2018.1\system\index\stubs\vue.local.directives.index\vue.local.directives.index.storage.len .WebStorm2018.1\system\index\stubs\vue.mixin.binding.index\vue.mixin.binding.index.storage .WebStorm2018.1\system\index\stubs\vue.mixin.binding.index\vue.mixin.binding.index.storage.len .WebStorm2018.1\system\index\stubs\vue.options.index\vue.options.index.storage .WebStorm2018.1\system\index\stubs\vue.options.index\vue.options.index.storage.len .WebStorm2018.1\system\index\todoindex\fileIdToHashId .WebStorm2018.1\system\index\todoindex\fileIdToHashId.len .WebStorm2018.1\system\index\todoindex\TodoIndex.storage .WebStorm2018.1\system\index\todoindex\TodoIndex.storage.len .WebStorm2018.1\system\index\todoindex\TodoIndex.ver .WebStorm2018.1\system\index\trigram.index\fileIdToHashId .WebStorm2018.1\system\index\trigram.index\fileIdToHashId.len .WebStorm2018.1\system\index\trigram.index\Trigram.Index.storage .WebStorm2018.1\system\index\trigram.index\Trigram.Index.storage.len .WebStorm2018.1\system\index\trigram.index\Trigram.Index.ver .WebStorm2018.1\system\index\webcomponentsindex\WebComponentsIndex.storage .WebStorm2018.1\system\index\webcomponentsindex\WebComponentsIndex.storage.len .WebStorm2018.1\system\index\webcomponentsindex\WebComponentsIndex.ver .WebStorm2018.1\system\index\webcomponentsindex\WebComponentsIndex_inputs .WebStorm2018.1\system\index\webcomponentsindex\WebComponentsIndex_inputs.len .WebStorm2018.1\system\index\xmlnamespaces\XmlNamespaces.storage .WebStorm2018.1\system\index\xmlnamespaces\XmlNamespaces.storage.len .WebStorm2018.1\system\index\xmlnamespaces\XmlNamespaces.ver .WebStorm2018.1\system\index\xmlnamespaces\XmlNamespaces_inputs .WebStorm2018.1\system\index\xmlnamespaces\XmlNamespaces_inputs.len .WebStorm2018.1\system\index\xmltagnames\XmlTagNames.storage .WebStorm2018.1\system\index\xmltagnames\XmlTagNames.storage.len .WebStorm2018.1\system\index\xmltagnames\XmlTagNames.ver .WebStorm2018.1\system\index\xmltagnames\XmlTagNames_inputs .WebStorm2018.1\system\index\xmltagnames\XmlTagNames_inputs.len .WebStorm2018.1\system\index\xsltsymbolindex\XsltSymbolIndex.storage .WebStorm2018.1\system\index\xsltsymbolindex\XsltSymbolIndex.storage.len .WebStorm2018.1\system\index\xsltsymbolindex\XsltSymbolIndex.ver .WebStorm2018.1\system\index\xsltsymbolindex\XsltSymbolIndex_inputs .WebStorm2018.1\system\index\xsltsymbolindex\XsltSymbolIndex_inputs.len .WebStorm2018.1\system\LocalHistory\changes.storageData .WebStorm2018.1\system\LocalHistory\changes.storageRecordIndex .WebStorm2018.1\system\log\idea.log .WebStorm2018.1\system\tmp\jna4670520824410272174.dll .WebStorm2018.1\system\tmp\jna4670520824410272174.dll.x 复制了 429 个文件 "Success" 请按任意键继续. . .</code></pre>
  • keepalived安装及配置使用keepalived监听端口

    keepalived安装及配置使用keepalived监听端口<h2><img alt="keepalived" class="img-thumbnail" src="/assets/upload/blog/thumbnail/2017-08/8eb5bf8739af46eca1ffa100e0b1bb8a.png" /></h2> <p>(keepalived双机网络图)<br />  </p> <h2>1.通过yum安装keepalived软件<br />  </h2> <pre> <code>yum install keepalived -y </code></pre> <h2><br /> 2.keepalived默认配置文件存放位置</h2> <pre> <code>/etc/keepalived/keepalived.conf</code></pre> <h2>3.keepalived配置文件详解</h2> <h3><strong>模式1</strong>:通过keepalived检查脚本,脚本检查应用的方式使用。</h3> 通过shell脚本检查应用的进程是否存在,如果不存在则停止keepalived服务,达到让本机失去抢占VIP的机会。剩下的其他机器根据优先级占用VIP;<br /> 注意:每个机器的优先级必须不同;每个机器状态默认均为BACKUP(BACKUP不会在高优先级启动的时候瞬间抢占VIP,主要用于数据库方面的数据同步,如果瞬间抢回中间未同步完全的数据将会出现问题); <pre> <code class="language-html">! Configuration File for keepalived global_defs { router_id 10086 #用户标识本节点的名称,通常为hostname } vrrp_script check_redis {#创建一个vrrp_script脚本,检查配置 script "/etc/keepalived/check_redis.sh" #在脚本中杀死keepalived的进程 interval 2 #检查脚本的频率,单位(秒) } vrrp_instance VI_1 { state BACKUP #配置为BACKUP节点,一般有三个配置可选MASTER(主机)、BACKUP(备机) nopreempt #不抢占模式,必须配合BACKUP。在配置了该模式后优先级则失去作用。谁先启动谁就是MASTER,失败后必须杀死当前keepalived进程,再次重启不会立即抢占资源。实际场合中推荐使用该方式而不是使用优先级的抢占模式。抢占模式会出现一些数据同步的问题。 interface eth0 #虚拟IP使用的网卡名称 virtual_router_id 51 #VRRP组名,多个节点的设置值必须一样,以指明各个节点属于同一个VRRP组 priority 90 #节点的优先级(1-254之间的值) advert_int 1 #组播信息发送间隔,多个节点设置必须一样 authentication {#设置验证信息,同一个组的多个节点设置必须一致 auth_type PASS auth_pass 1111 } virtual_ipaddress {#指定虚拟IP(即VIP)同一个组的多个节点必须设置一致 192.168.1.100 } track_script { check_redis #执行指定vrrp_script脚本 } }</code></pre> <p><strong>check_redis.sh脚本:</strong></p> <pre> <code class="language-bash">#!/bin/sh CHECK_PROCESS=`ps -C redis-server --no-heading| wc -l` if [ $CHECK_PROCESS -eq 0 ];then echo "Redis is stop" sleep 2 CHECK_PROCESS=`ps -C redis-server --no-heading| wc -l` if [ $CHECK_PROCESS -eq 0 ];then /etc/init.d/keepalived stop fi fi </code></pre> <h3><strong>check_port.sh脚本</strong><br />  </h3> <pre> <code class="language-bash">#!/bin/bash #keepalived 监控端口脚本 #使用方法: #在keepalived的配置文件中 #vrrp_script check_port {#创建一个vrrp_script脚本,检查配置 # script "/etc/keepalived/check_port.sh 6379" #配置监听的端口 # interval 2 #检查脚本的频率,单位(秒) #} CHK_PORT=$1 echo $CHK_PORT if [ "$CHK_PORT" != "" ];then PORT_PROCESS=`lsof -i:$CHK_PORT|wc -l` if [ $PORT_PROCESS -eq 0 ];then echo "Port $CHK_PORT Is Not Used,End." sleep 2 PORT_PROCESS=`lsof -i:$CHK_PORT|wc -l` if [ $PORT_PROCESS -eq 0 ];then /etc/init.d/keepalived stop fi fi else echo "Check Port Cant Be Empty!" fi</code></pre> <h3><br /> <strong>模式二:</strong>通过keepalived直接监听应用端口方式使用</h3> 配置文件:/etc/keepalived.conf <pre> <code class="language-bash">! Configuration File for keepalived global_defs { router_id 10086 } vrrp_script check_redis { script "</dev/tcp/127.0.0.1/6379" #修改最后的redis端口6379为自己需要监听的端口,理论上可以监听远程端口 interval 2 #检查脚本的频率,单位(秒) weight -30 #端口检查失败,优先级减少30,默认减少2[注意:两台主机配置的weight相同时候必须保证weight的值大于priority差值] } vrrp_instance VI_1 { state MASTER#BACKUP interface eth0 virtual_router_id 51 priority 95 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.1.100 192.168.2.110 } track_script { check_redis } }</code></pre> 每个主机配置的内容仅仅优先级不能相同,其他保持一致。这里默认使用的MASTER,所以在优先级高的节点恢复之后会立即抢占VIP。如果不希望立即抢回VIP则配置BACKUP,BACKUP则是当前VIP机器的keepalived服务挂掉再去寻找高优先级的主机。<br /> <br /> 整个过程可以通过一下命令查看日志: <pre> <code>tail -f /var/log/message</code></pre> <h2> </h2> <p><span style="color:#8e44ad"><strong>推荐使用脚本+非抢占模式使用</strong></span></p> <h2><br /> 4.开放防火墙端口</h2> <strong>注意:keepalived默认使用端口122进行通讯,必须开放112端口,或者停用防火墙.保证各个主机之间112端口的连通性</strong><br /> CentOS6中iptables配置开放112端口 <pre> <code class="language-html">#iptables -I INPUT -p 112 -j ACCEPT</code></pre> 保存规则并重启防火墙 <pre> <code>service iptables save service iptables restart</code></pre> <p>查看iptables端口开放情况</p> <pre> <code class="language-bash">[root@template keepalived]# iptables -L -n --line-numbers Chain INPUT (policy ACCEPT) num target prot opt source destination 1 ACCEPT 112 -- 0.0.0.0/0 0.0.0.0/0 2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 5 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 6 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) num target prot opt source destination 1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) num target prot opt source destination [root@template keepalived]# </code></pre> <h2><br /> 5.启动keepalived</h2> 启动命令: <pre> <code>service keepalived start</code></pre> 查看启用状态 <pre> <code>service keepalived status</code></pre> 设置开机启动 <pre> <code>chkconfig keepalived on</code></pre> <br /> <br /> keepalived其他详细配置说明 <p><strong>全局定义块</strong></p> <p>1、email通知(notification_email、smtp_server、smtp_connect_timeout):用于服务有故障时发送邮件报警,可选项,不建议用。需要系统开启sendmail服务,建议用第三独立监控服务,如用<a href="http://baike.baidu.com/link?url=eiaO-UZufjBG-j-e-nMS2RZrjxE_Xd2PpecyOrAq3sv0umvlhfpMlkR7pO-wEnpV4Vb2e7DWnZ9kKDfeh9YiDa" rel="external nofollow" target="_blank">nagios</a>全面监控代替。 <br /> 2、lvs_id:lvs负载均衡器标识,在一个网络内,它的值应该是唯一的。 <br /> 3、router_id:用户标识本节点的名称,通常为hostname <br /> 4、花括号{}:用来分隔定义块,必须成对出现。如果写漏了,keepalived运行时不会得到预期的结果。由于定义块存在嵌套关系,因此很容易遗漏结尾处的花括号,这点需要特别注意。</p> <p><strong>VRRP</strong><strong>实例定义块</strong></p> <ol start="1"> <li>vrrp_sync_group:同步vrrp级,用于确定失败切换(FailOver)包含的路由实例个数。即在有2个负载均衡器的场景,一旦某个负载均衡器失效,需要自动切换到另外一个负载均衡器的实例是哪</li> <li>group:至少要包含一个vrrp实例,vrrp实例名称必须和vrrp_instance定义的一致</li> <li>vrrp_instance:vrrp实例名 <br /> <strong>1> state</strong>:实例状态,只有MASTER 和 BACKUP两种状态,并且需要全部大写。抢占模式下,其中MASTER为工作状态,BACKUP为备用状态。当MASTER所在的服务器失效时,BACKUP所在的服务会自动把它的状态由BACKUP切换到MASTER状态。当失效的MASTER所在的服务恢复时,BACKUP从MASTER恢复到BACKUP状态。 <br /> <strong>2> interface</strong>:对外提供服务的网卡接口,即VIP绑定的网卡接口。如:eth0,eth1。当前主流的服务器都有2个或2个以上的接口(分别对应外网和内网),在选择网卡接口时,一定要核实清楚。 <br /> <strong>3>mcast_src_ip</strong>:本机IP地址 <br /> <strong>4>virtual_router_id</strong>:虚拟路由的ID号,每个节点设置必须一样,可选择IP最后一段使用,相同的 VRID 为一个组,他将决定多播的 MAC 地址。 <br /> <strong>5> priority</strong>:节点优先级,取值范围0~254,MASTER要比BACKUP高 <br /> <strong>6>advert_int</strong>:MASTER与BACKUP节点间同步检查的时间间隔,单位为秒 <br /> <strong>7>lvs_sync_daemon_inteface</strong>:负载均衡器之间的监控接口,类似于 HA HeartBeat的心跳线。但它的机制优于 Heartbeat,因为它没有“裂脑”这个问题,它是以优先级这个机制来规避这个麻烦的。在 DR 模式中,lvs_sync_daemon_inteface与服务接口interface使用同一个网络接口 <br /> <strong>8> authentication</strong>:验证类型和验证密码。类型主要有 PASS、AH 两种,通常使用PASS类型,据说AH使用时有问题。验证密码为明文,同一vrrp实例MASTER与BACKUP使用相同的密码才能正常通信。 <br /> <strong>9>smtp_alert</strong>:有故障时是否激活邮件通知 <br /> <strong>10>nopreempt</strong>:禁止抢占服务。默认情况,当MASTER服务挂掉之后,BACKUP自动升级为MASTER并接替它的任务,当MASTER服务恢复后,升级为MASTER的BACKUP服务又自动降为BACKUP,把工作权交给原MASTER。当配置了nopreempt,MASTER从挂掉到恢复,不再将服务抢占过来。 <br /> <strong>11>virtual_ipaddress</strong>:虚拟IP地址池,可以有多个IP,每个IP占一行,不需要指定子网掩码。注意:这个IP必须与我们的设定的vip保持一致。</li> </ol> <p>keepalived.conf配置文件中加入以下内容</p> <p>1.notify_master“想要执行的脚本路径” #表示当切换到master状态时,要执行的脚本</p> <p>2.notify_backup “想要执行的脚本路径”#表示当切换到backup状态时,要执行的脚本</p> <p>3.notify_fault“想要执行的脚本路径”#表示切换出现故障时要执行的脚本</p> <br />