最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 花五分钟重新认知 Vue 项目 src 目录

    正文概述 掘金(掘金安东尼)   2021-02-20   741

    译文启发

    原文:How to structure my Vue.js project

    作者:Manu Ustenko

    职位:Sennder GmbH 高级软件工程师

    Sennder:欧洲排名第一的全卡车装载数字货运代理平台。

    译文博客链接:地址

    Vue CLI

    认知一个项目从认识目录开始!Vue 项目那逃不过认知最通用的 Vue CLI 目录结构。

    如下(已显示全部可选项):

    --public
    ----img
    ------icons
    ----favicon.ico
    ----index.html
    ----robots.txt
    --src
    ----assets
    ------logo.png
    ----components
    ------HelloWorld.vue
    ----router
    ------index.ts
    ----store
    ------index.ts
    ----views
    ------About.vue
    ------Home.vue
    ----App.vue
    ----main.ts
    ----registerServiceWorkers.ts
    ----shims-vue.d.ts
    --tests
    ----e2e
    ----unit
    --.browserslistrc
    --.eslintrc.js
    --.gitignore
    --babel.config.js
    --cypress.json
    --jest.config.js
    --package.json
    --package-lock.json
    --README.md
    --tsconfig.json
    

    原因是:我们应该花更多的精力去关注 src 文件夹!具体往下看。

    新 src 目录

    闲言少叙,改造后的目录结构:

    src
    --assets
    --common
    --layouts
    --middlewares
    --modules
    --plugins
    --router
    --services
    --static
    --store
    --views
    

    让咱们来一一揭晓为什么要设置这样的目录结构!

    Assets

    静态文件目录:包含字体、图标、图片、样式等静态资源,不做赘述。

    Common

    公共文件夹:通常来说,它又能被拆分成多个子目录:componentsmixinsdirectives,又或者是单个的文件:functions.tshelpers.tsconstants.tsconfig.ts,亦或者其它。但它们有共同的特点:Common 文件夹下的文件都是在多出被引用的。

    举例:在 src/common/components 文件夹下,你可以设置 Button.vue 在全局共享的组件;在 helpers.ts 文件中写公共方法以供多处调用。

    Layouts

    你可以在 Layouts 文件夹下放整个应用的布局文件。比如 AppLayout.vue.,关于布局的更多问题可以见 这篇文章-Vue tricks: smart layouts for VueJS

    Middlewares

    “中间件”这个文件夹有点类似 vue router,你可以在之下放置你的关于路由跳转判断文件。这里有个简单的例子:

    export default function checkAuth(next, isAuthenticated) {
      if (isAuthenticated) {
        next('/')
      } else {
        next('/login');
      }
    }
    

    在 vue-router 中这样使用

    import Router from 'vue-router'
    import checkAuth from '../middlewares/checkAuth.js'
    const isAuthenticated = true
    const router = new Router({
      routes: [],
      mode: 'history'
    })
    router.beforeEach((to, from, next) => {
      checkAuth(next, isAuthenticated)
    });
    

    此例意在做权限校验。更多关于中间件的讨论,在这篇文章-Vue tricks: smart router for VueJS

    Modules

    Modules 文件夹是咱们应用的核心!

    此文件夹关于应用的业务逻辑部分,它有以下类:

    • 业务组件 components
    • 测试单元 tests
    • 数据持久 store
    • 其它本业务相关的文件

    这里有个很棒的例子:订单业务模块

    src
    --modules
    ----orders
    ------__tests__
    ------components
    --------OrdersList.vue
    --------OrderDetails.vue
    ------store
    --------actions.ts
    --------getters.ts
    --------mutations.ts
    --------state.ts
    ------helpers.ts
    ------types.ts
    

    包括:测试文件、组件(订单列表、订单详情)、Vuex 数据、相关文件。

    它又像是一个小的 src 目录~

    Plugins

    Plugins 文件夹当然是用来放 plugin。在 Vue2 中,我们这样调用

    import MyPlugin from './myPlugin.ts'
    Vue.use(MyPlugin, { someOption: true })
    

    在 Vue3 中,我们也可以在 main.ts 中调用,更多可见 v3-using-a-plugin。

    Services

    Services 文件夹是放请求库和 API 的地方,也包括对 localStorage 的管理等。

    本瓜之前也翻译过这篇文章:Vue 魔法师 —— 将 API “类化”

    Static

    通常来说,我们不需要 Static 这个文件夹,但也可以放一些 dummy data (虚拟数据)。

    Router

    Router 文件夹放置你的路由文件,太过常见、无需赘述。你也可以根据需要只在根目录设置 router.ts。但是更推荐你将路由进行一个划分以便阅读和扩展。vue-tricks-smart-router

    Store

    Store 文件夹放置你的 Vuex 相关文件。在这个目录下主要是一些全局的持久数据及方法:state 、 actions 、 mutations 、 getters,同时也和 modules 文件夹下的 Vuex 进行关联。

    Views

    Views 文件夹是我们应用中第二重要的文件夹了。我们都知道它包含的也是业务组件。但其实它更应该是路由的一种映射,比如 /home /about /orders 这个路由,在 Views 文件夹下就应该有 Home.vue About.vue Orders.vue 这三个文件!

    你一定会问为什么要拆分业务部分为 ViewsModules 这两个目录,而不是像 Vue CLI 那样放在一起?

    有以下优点:

    • 更清晰的目录结构
    • 更快速的了解路由
    • 更直观看到根文件、根页面、以及它们与子组件、子业务是如何关联的。

    小结

    作者从工作中针对 Vue 项目目录结构进行思考,然后给出建议,并不是要求咱完全套用,咱可汲取其思想,按需所用。

    本瓜以为:在实际的项目中,Vue CLI 项目确实会造成 Views 目录的庞大,所以将 Views 改造,分为 ViewsModules 目录,前者是核心的页面(参照路由),后者是具体的子业务及相关。这样的建议确实是不错的思路~

    其实,又回到了那个问题:如果咱足够了解业务,需求没有频繁的改动,目录结构应该会是清晰的。但是没办法,再好的产品也避免不了来回改动。所以只能定期梳理、定期优化了。认知目录的过程也是对业务熟悉的过程。

    以上!

    撰文不易,点赞鼓励。讨论留言,携手向前。★,°:.☆( ̄▽ ̄)/$:.°★

    求一波关注,我的公众号:【掘金安东尼】,牛年持续更新~


    起源地下载网 » 花五分钟重新认知 Vue 项目 src 目录

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元