vue3.0梳理之项目搭建(vite)

说了一些3.0的东西,但是项目的搭建给忽略了

1.项目的初始化搭建

  • 初始化 vue3.0 项目
yarn create @vitejs/app vue-3.0-test
  • 选择vue创建(梳理完再说+ts)
    我用新电脑从头开始创建的项目,选择自己常用的yarn,出现了一个错误问题,顺便说一嘴
    yarn : 无法加载文件 C:\Users\zhang\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 1
    这个问题实际上是脚本执行的权限问题,可以通过管理员方式打开脚本工具,执行如下操作
set-ExecutionPolicy RemoteSigned
//选择y同意
get-ExecutionPolicy
  • 执行过这两个脚本修改权限之后就可以进行yarn的使用

可以看到初始化项目之后项目的目录结构十分的简洁,我们执行yarn(或者npm install)来安装依赖
运行即可

2.ts配置

ts的配置其实没什么可讲的,但是实际上在工作之中,不一定我们开发的项目一开始创建就随我们的心意,我就接手了一个vue3.0不带ts的项目,幸好项目刚创建没多久,还可以修改

  • 当然自己从头创建项目的话,需要ts在一开始的初始化搭建中就已经选择了带ts的选项,搭建完毕之后也就不再需要做些什么
  • 如果搭建完毕了没有,那要做个选择,是重新搭建还是改一下,改的话就需要以下操作
    /src/main.js,重命名为/src/main.ts
    /src/index.html,引入的main.js,改成main.ts
    /src/App.vue,<script> 修改为 <script lang="ts">
    安装TypeScript

3.配置路径处理模块

//安装ts的类型声明文件
//yarn add @types/node -D
//通过配置alias来定义路径的别名
resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'),
      '@coms': path.resolve(__dirname, 'src/components')
    }
  }

4.配置scss全局变量

css: {
    preprocessorOptions: {
      scss: {
        additionalData: `@import "@/assets/scss/_theme.scss";`
      }
    }
  }

5.配置按需加载

import styleImport from 'vite-plugin-style-import'
plugins: [
    vue(),
    styleImport({
      libs: [{
        libraryName: 'vant',
        esModule: true,
        resolveStyle: (name) => {
          return `vant/es/${name}/style/css`;
        },
      }]
    })
  ]

6.配置分包

rollupOptions: {
      treeshake: false,
      output: {
        manualChunks (id) {
          if (id.includes('node_modules')) {
            return id.toString().split('node_modules/')[1].split('/')[0].toString()
          }
        }
      }
    }

7.配置路由

yarn add vue-router@next --save之后创建router文件夹,创建index.ts,内容按照router配置书写

import { createRouter, createWebHashHistory } from "vue-router";

const router = createRouter({
  history: createWebHashHistory(),
  routes: [
    {
      path: "/home",
      name: "Home",
      alias: "/",
      component: () => import("../pages/Home.vue")
    }
  ]
})

export default router;

路由需要在入口文件内app.use(router);去加载路由

8.集成vuex(用了再集成)

yarn add vuex@next --save之后创建store文件夹和index,ts,内容按照寻常vuex使用

import { createStore } from "vuex";

const store = createStore({
  modules: {
    home: {
      namespaced: true,
      state: {
        count: 1
      },
      mutations: {
        add(state){
          state.count++;
        }
      }
    }
  }
})

export default store;

路由需要在入口文件内app.use(store);去加载路由

整体配置如下,cdn配置与模块引入不做赘述

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import importToCDN, { autoComplete } from 'vite-plugin-cdn-import'
// 路径处理模块
import path from 'path'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    importToCDN({
      modules: [
        autoComplete('vue'),
        autoComplete('axios'),
        autoComplete('lodash'),
        {
          name:'vue',
          var:'Vue',
          path:'https://cdn.jsdelivr.net/npm/vue@next'
        },
        {
            name:'vuex',
            var:'Vuex',
            path:'https://cdn.jsdelivr.net/npm/vuex@4.0.2/dist/vuex.global.prod.js'
        },
        {
            name:'vue-router',
            var:'VueRouter',
            path:'https://cdn.jsdelivr.net/npm/vue-router@4.0.10/dist/vue-router.global.prod.js'
        },
        {
          name:'vant',
          var:'vant',
          css: 'https://cdn.jsdelivr.net/npm/vant@next/lib/index.css',
          path:'https://cdn.jsdelivr.net/npm/vant@next/lib/vant.min.js'
        }
      ]
    })
  ],
  resolve: {
    // 定义别名
    alias: {
      '@': path.resolve(__dirname, 'src'),
      '@components': path.resolve(__dirname, 'src/components')
    }
  },
  css: {
    preprocessorOptions: {
      scss: {
        charset: false,
        additionalData: `@import "@/assets/scss/_theme.scss";`
      },
      less: {
        javascriptEnabled: true
      }
    }
  },
  build: {
    target: 'modules',
    outDir: 'dist',
    assetsDir: 'static',
    minify: 'terser', // 混淆器,terser构建后文件体积更小
    sourcemap: false,
    rollupOptions: {
      treeshake: false,
      output: {
        manualChunks (id) {
          if (id.includes('node_modules')) {
            return id.toString().split('node_modules/')[1].split('/')[0].toString()
          }
        }
      }
    }
  },
  server: {
    port: 8080, // 端口号
  },
})
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值