美文网首页
07 | 前端项目初始化

07 | 前端项目初始化

作者: cemcoe | 来源:发表于2020-10-14 19:40 被阅读0次

    这里是在简书仿简书的第七篇,早睡早起身体好

    项目目录 jianshu_client

    前端初始化要做的:

    • 为目录配置别名
    • 初始化全局样式
    • 划分目录结构
    • 封装网络请求函数

    为目录配置别名

    预设了src/为@,当我们频繁需要使用其他文件夹时可以在vue.config.js 中为文件夹设置别名。

    // vue.config.js
    module.exports = {
      configureWebpack: {
        resolve: {
          alias: {
            'assets': '@/assets',
            'common': '@/common',
            'components': '@/components',
            'network': '@/network',
            'views': '@/views',
          }
        },
      }, 
    }
    

    当然了,vue.config.js 中还有其他可配置项,具体可参考官方文档。


    初始化全局样式

    这个没什么东西,自己写个css文件或者网上找个引入就行。


    划分目录结构

    好的目录结构可以使开发更加有效率。这个项目的目录结构是这样。

    顶层目录为 jianshu_client, 后端项目的顶层目录是 jianshu_server。

    回到前端项目来,编写代码主要在src目录中,下面是src目录下的文件结构。

    
    - assets 静态文件
    - components 抽离的组件
      - common 与业务无关的组件,可以直接使用到另一个项目,比如navbar
      - cotent 与业务相关的组件,不同类型的应用可能无法使用,比如本项目的postList,其他类型的项目中可能没有什么post
    - network 网络请求相关的代码
      - request.js 封装的网络请求
      - user.js 和用户相关的网络请求函数
      - 。。。
    - router 路由相关文件
    - store vuex相关代码
    - utils 工具函数 如函数的防抖和节流
    - views 路由文件
      - Home 首页
    

    封装网络请求函数

    下面来看网络请求的封装,作为 2020 年的 web 应用,肯定是要搞动态数据的。一层不变的应用不会缓解用户的信息焦虑。那么,如何获取数据就成了必不可少的操作了。

    甭管你是使用原生的 ajax 还是 fetch 还是 axios,对它们进行一定的封装也是必不可少的。

    这里以 axios 为例,我们导出一个名为 request 的函数,后续进行请求时使用我们封装的 request 函数,而不是 axios, 这样做就将操作和 axios 做了分离,当 axios 过时了,我们只需要更改该请求函数的逻辑,而对于业务代码中的网络请求就不用去更改了。

    同时这里我们做了一些拦截请求,为每个请求添加Authorization,这个在登录时会再看它。

    // network/request.js
    
    export function request(config) {
      // 1. 创建axios实例
      const instance = axios.create({
        baseURL: apiUrl,
        timeout: 10000, // 设置超时时间10s
      })
      // 2. 请求拦截器,添加jwt token
    
      instance.interceptors.request.use(config => {
        config.headers.Authorization = `Bearer ${localStorage.getItem('token')}` || ''
        // 每个请求都重新设置有点耗费资源,一般token发生改变会是换账号登录,或token过期,可能会有更好的方案。
        return config
      }, err => {
    
      })
      // 3. 响应拦截
      instance.interceptors.response.use(res => {
        return res.data
      }, error => {
        console.log(error.response)
        }
        return Promise.reject(error.response.data);
      })
    
      // 4. 发送真正的网络请求
      return instance(config)
    }
    
    

    相关文章

      网友评论

          本文标题:07 | 前端项目初始化

          本文链接:https://www.haomeiwen.com/subject/xetfpktx.html