欢迎来到DIVCSS5查找CSS资料与学习DIV CSS布局技术!
  1、构建项目
 
  vuecreatexxx
 
  上面的第一条,也就是aaa这一个选项在你第一次创建项目的时候是并不会出现的,只有你第一次创建完成项目后回提示你保存为默认配置模板,下次新建项目的时候就可以使用你选用的配置快速新建项目了,不需要再重新选择配置项目了。
 
  第二条选项便是vuecli3默认的项目模板,包含babel和eslint。
 
  第三条选项便是自主选择你项目所需的配置。
 
  这里由于默认模板没有啥展示的必要所以我们便选择手动配置。
 
  选择项目配置:
 
  这里我们可以选择我们需要的配置选项,选择完成后回车进入下一步。
 
  在选择功能后,会询问更细节的配置
 
  TypeScript:
 
  是否使用class风格的组件语法:Useclass-stylecomponentsyntax?
 
  是否使用babel做转义:UseBabelalongsideTypeScriptforauto-detectedpolyfills?
 
  Router:
 
  1.是否使用history模式:Usehistorymodeforrouter?
 
  CSSPre-processors:
 
  选择CSS预处理类型:PickaCSSpre-processor
 
  Linter/Formatter
 
  选择Linter/Formatter规范类型:Pickalinter/formatterconfig
 
  选择lint方式,保存时检查/提交时检查:Pickadditionallintfeatures
 
  Testing
 
  选择Unit测试方式
 
  选择E2E测试方式
 
  选择Babel,PostCSS,ESLint等自定义配置的存放位置WheredoyoupreferplacingconfigforBabel,PostCSS,ESLint,etc.?
 
  创建成功。
 
  2、修改配置
 
  vue-cli3脚手架生成项目目录说明
 
  │.browserslistrc
 
  │.gitignore
 
  │.postcssrc.js//postcss配置
 
  │babel.config.js
 
  │package.json//依赖
 
  │README.md//项目readme
 
  │tsconfig.json//ts配置
 
  │tslint.json//tslint配置
 
  │vue.config.js//webpack配置(~自己新建~)
 
  │yarn.lock
 
  │
 
  ├─public//静态页面
 
  ││—favicon.ico
 
  ││—index.html
 
  │
 
  ├─src//主目录
 
  │├─assets//静态资源
 
  ││logo.png
 
  ││
 
  │├─components
 
  ││HelloWorld.vue
 
  ││
 
  ││─views//页面
 
  ││About.vue
 
  ││Home.vue
 
  ││
 
  ││App.vue//页面主入口
 
  ││
 
  ││main.ts//脚本主入口
 
  ││
 
  │├─router//路由配置
 
  ││index.ts
 
  ││
 
  ││registerServiceWorker.ts//PWA配置
 
  ││
 
  ││shims-tsx.d.ts
 
  ││shims-vue.d.ts
 
  ││
 
  ││
 
  │├─store//vuex配置
 
  ││index.ts
 
  ││
 
  │├─typings//全局注入(~自己新建~)
 
  ││
 
  │├─utils//工具方法(axios封装,全局方法等)(~自己新建~)
 
  │
 
  │
 
  └─tests//测试用例
 
  ├─e2e
 
  │├─plugins
 
  ││index.js
 
  ││
 
  │├─specs
 
  ││test.js
 
  ││
 
  │└─support
 
  │commands.js
 
  │index.js
 
  │
 
  └─unit
 
  HelloWorld.spec.ts
 
  1、在.browserslistrc文件中添加
 
  last3ieversions,
 
  notie<=8
 
  其它配置,请去https://github.com/browserslist/browserslist。npxbrowserslist在项目目录中运行以查看查询选择了哪些浏览器
 
  2、tslint配置
 
  //关闭console
 
  "no-console":[true,"log","dir","table"]
 
  //tslint的函数前后空格:
 
  "space-before-function-paren":["error",{
 
  "anonymous":"always",
 
  "named":"always",
 
  "asyncArrow":"always"
 
  }]
 
  //tslint分号的配置:
 
  "semicolon":[true,"never"]
 
  其它规则:https://palantir.github.io/tslint/rules/
 
  3、路由处理逻辑(登录验证、拦截等)
 
  //main.ts文件
 
  router.beforeEach((to:any,from:any,next:any)=>{
 
  if(to.name==='login'){
 
  next({name:'home/index'})
 
  }else{
 
  next()
 
  }
 
  })
 
  4、axios改造
 
  npmiaxios--save
 
  src下新建axios.d.tsaxios.config.ts文件
 
  //axios.config.ts
 
  importaxios,{AxiosInstance}from'axios'
 
  declaremodule'Vue/types/vue'{
 
  interfaceVue{
 
  $axios:AxiosInstance
 
  }
 
  }
 
  //main.ts文件
 
  importVuefrom'vue';
 
  importaxiosfrom'axios';
 
  Vue.prototype.$axios=axios;
 
  /**
 
  *创建axios实例
 
  */
 
  constservice=axios.create({
 
  timeout:3000,
 
  baseURL:'http://xxx',
 
  });
 
  /**
 
  *req拦截器
 
  */
 
  service.interceptors.request.use((config:object):object=>{
 
  returnconfig
 
  },(error:any):object=>{
 
  returnPromise.reject(error)
 
  });
 
  /**
 
  *res拦截器
 
  */
 
  service.interceptors.response.use((response:any)=>{
 
  constres=response.data;
 
  if(res.error){
 
  if(process.env.NODE_ENV!=='production'){
 
  console.error(res);
 
  }
 
  returnPromise.reject(res);
 
  }
 
  returnPromise.resolve(res);
 
  });
 
  //main.ts
 
  import'./axios.config';
 
  4、store改造
 
  ├──index.html
 
  ├──main.js
 
  ├──components
 
  │├──App.vue
 
  │└──...
 
  └──store
 
  ├──index.ts#我们组装模块并导出store的地方
 
  ├──actions.ts#根级别的action
 
  ├──mutations.ts#根级别的mutation
 
  └──modules
 
  ├──cart.ts#购物车模块
 
  使用:
 
  使用module形式
 
  全局的一些操作,方法,放入store中,业务逻辑尽量少放,项目全局方法可以放入。例如:cookie,globalcache
 
  action(异步):api的操作,调用方式:this.$store.dispatch(functionName,data)
 
  mutations(同步):dom相关操作,方法名一般使用常量,
 
  调用方式:this.$store.commit(mutationsName,data)
 
  this.$store.getters[XXX]=>this.$store.getters[namespaced/XXX]
 
  this.$store.dispatch(XXX,{})=>this.$store.dispatch(namespaced/XXX,{})
 
  this.$store.commit(XXX,{})=>this.$store.commit(namespaced/XXX,{})
 
  //store/index.ts
 
  importVuefrom'vue';
 
  importVuexfrom'vuex';
 
  importcartfrom'./modules/cart';
 
  Vue.use(Vuex);
 
  exportdefaultnewVuex.Store({
 
  modules:{
 
  cart,
 
  },
 
  });
 
  //cart.ts
 
  import{ActionContext}from'vuex';
 
  exportinterfaceState{
 
  token:string;
 
  }
 
  conststate:State={
 
  token:'',
 
  };
 
  //getters
 
  constgetters={
 
  toUpperToken:(state:State)=>{
 
  returnstate.token.toUpperCase();
 
  },
 
  };
 
  //actions
 
  constactions={
 
  setTokenAsync({commit}:ActionContext<State,State>,payload:any){
 
  setTimeout(()=>{
 
  commit('setToken',payload);
 
  },1000);
 
  },
 
  };
 
  //mutations
 
  constmutations={
 
  setToken(state:State,payload:any){
 
  state.token=payload;
 
  },
 
  };
 
  exportdefault{
 
  namespaced:true,
 
  state,
 
  getters,
 
  actions,
 
  mutations,
 
  };
 
  5、vue.config.js配置
 
  https://cli.vuejs.org/zh/config/#vue-config-js所列出的属性,可以直接配置。其它属性可以通过configureWebpack、chainWebpack配置。

如需转载,请注明文章出处和来源网址:http://www.divcss5.com/html/h56665.shtml