当前位置:   article > 正文

Vite+Vue3+TypeScript 搭建开发脚手架_未设置 "baseurl" 时,不允许使用非相对路径。是否忘记了前导 "./"?

未设置 "baseurl" 时,不允许使用非相对路径。是否忘记了前导 "./"?

Vite前端开发与构建工具

开发环境中,vite无需打包,可快速的冷启动

真正的按需编译,不需要等待整个应用编译完成

一个开发服务器,它基于原生ES模块 提供了丰富的内建功能,速度快模块热更新(HMR)

一套构建指令,它使用Rollup打包代码,并且它是预配置的,可输出用于生产环境的高度优化过的静态资源。

Vue3 与 Vue2区别

Vue2 使用 Options API 而 Vue3 使用的 Composition API

TypeScript

在应用中对类型判断的定义和使用有很强的表现。同一对象的多个键返回值必须通过定义对应的接口(interface)来进行类型定义。要不然在 ESLint 时都会报错

使用Vite创建脚手架

注意:Vite 需要 Node.js 版本 >= 12.0.0

1、创建项目文件夹,例如:想在workSpace文件下创建 my-vue-app,则先进入workplace文件夹,再打开cmd,运行一下命令

  1. # npm 6.x
  2. npm init vite@latest my-vue-app --template vue
  3. # npm 7+, 需要额外的双横线:
  4. npm init vite@latest my-vue-app -- --template vue

2、选择Vue 

3、选择TypeScript

 

4、完成后可以看到项目文件夹(my-vue-app),然后根据指令,进入文件夹,安装依赖,运行项目

 完成后效果

 配置文件引用别名 alias

修改 vite.config.ts 文件配置(此时:会报错 path 未定义,接下来定义path)

  1. import { defineConfig } from 'vite'
  2. import vue from '@vitejs/plugin-vue'
  3. import path from 'path'
  4. // https://vitejs.dev/config/
  5. export default defineConfig({
  6. plugins: [vue()],
  7. // 配置文件引用别名 alias
  8. resolve: {
  9. alias: {
  10. '@': path.resolve(__dirname, 'src'),
  11. },
  12. },
  13. })

 定义path,修改tsconfig.json

  1. {
  2. "compilerOptions": {
  3. "target": "ESNext",
  4. "useDefineForClassFields": true,
  5. "module": "ESNext",
  6. "moduleResolution": "Node",
  7. "strict": true,
  8. "jsx": "preserve",
  9. "resolveJsonModule": true,
  10. "isolatedModules": true,
  11. "esModuleInterop": true,
  12. "lib": ["ESNext", "DOM"],
  13. "skipLibCheck": true,
  14. "noEmit": true,
  15. "baseUrl": ".",
  16. "paths": {
  17. "@/*":["src/*"] // 未设置 "baseUrl" 时,不允许使用非相对路径。是否忘记了前导 "./",所以添加一个baseUrl
  18. }
  19. },
  20. "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"],
  21. "references": [{ "path": "./tsconfig.node.json" }]
  22. }

安装css处理器插件scss

  1. npm install sass-loader sass webpack --save-dev
  2. 或yarn add sass-loader --dev
  3. npm i dart-sass
  4. 或yarn add dart-sass --dev
  5. npm i npm-sass
  6. 或yarn add sass --dev

 配置全局scss样式(在src/assets 下创建style 文件夹,用于存放全局样式文件,创建main.scss文件,用于测试)

$test-color: rgb(255, 0, 60);

在组件  HelloWorld.vue文件中 添加测试元素与绑定测试样式

 仅仅这样会编译报错,还需要在vite.config.ts 中增加 全局样式配置

  1. // 全局配置 样式变量
  2. css:{
  3. preprocessorOptions:{
  4. scss:{
  5. additionalData:'@import "@/assets/style/main.scss";'
  6. }
  7. }
  8. },

完整配置如下图

 效果图片

 安装路由 vue-router

  1. npm i vue-router
  2. yarn add vue-router@4

在src 文件夹下 创建 router 文件夹 -》并新建router.ts  文件,文件内容如下

  1. import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';
  2. const routes: RouteRecordRaw[] = [
  3. {
  4. path: '/home',
  5. name: 'home',
  6. component: () => import('@/views/Home/index.vue'), //可能问题1 注意这里要带上 文件后缀.vue
  7. },
  8. {
  9. path: '/',
  10. name: 'helloWorld',
  11. component: () => import('@/components/HelloWorld.vue'), //可能问题1 注意这里要带上 文件后缀.vue
  12. },
  13. {
  14. path: '/helloWorld',
  15. name: 'helloWorld',
  16. component: () => import('@/components/HelloWorld.vue'), //可能问题1 注意这里要带上 文件后缀.vue
  17. },
  18. ];
  19. const router = createRouter({
  20. history: createWebHistory(),
  21. routes,
  22. });
  23. export default router;

新建页面:在src 文件夹下创建 views文件夹-》创建 home 文件夹-》创建 index.vue 文件,文件内容如下

  1. <template>
  2. <h1>这是 home 页</h1>
  3. <router-link :to="{path:'/helloWorld'}">跳转到helloWord(router-link)</router-link>
  4. <br/>
  5. <button @click="goHelloWordPage">跳转到 helloWord(js_function)</button>
  6. </template>
  7. <script setup lang="ts">
  8. import {useRouter} from 'vue-router'
  9. // 2. 调用useRouter函数
  10. const $r = useRouter();
  11. const goHelloWordPage = () =>{
  12. $r.push("helloWorld")
  13. }
  14. </script>

 在入口文件main.ts 中 配置路由

  1. import { createApp } from 'vue'
  2. import './style.css'
  3. import App from './App.vue'
  4. import router from '@/router/router'
  5. const app = createApp(App)
  6. app.use(router)
  7. app.mount('#app')
  8. //createApp(App).mount('#app')

注意:配置完成后发现 浏览器地址栏:http://127.0.0.1:5174/home  无法跳转,需要在App.vue中配置路由容器,原有的template 替换为 一下内容

  1. <template>
  2. <!-- <h1>这是 主容器</h1> -->
  3. <router-view></router-view>
  4. </template>

 状态管理 Pinia

 安装

  1. npm i pinia
  2. yarn add pinia@next

 在main.ts 中注册 pinia

  1. // 导入组件
  2. import { createPinia } from "pinia"
  3. # 创建根存储库并将其传递给应用程序
  4. app.use(createPinia())

 

 定义状态:在src文件夹下 创建store文件夹-》创建main.ts文件,文件内容如下

  1. import { defineStore } from 'pinia'
  2. export const useMainStore = defineStore({
  3. id: 'main',
  4. state: () =>({
  5. name: '群主'
  6. }),
  7. getters: {
  8. nameLength: (state) => state.name.length,
  9. }
  10. })

 组件中使用与修改:

  1. <template>
  2. <div>这是状态管理Pinia:{{ mainStore.name }}<br />长度:{{ mainStore.nameLength }}</div>
  3. <button @click="updateName">修改 store 中的 name</button>
  4. </template>
  5. <script setup lang="ts">
  6. import { useMainStore } from "@/store/main";
  7. const mainStore = useMainStore()
  8. const updateName = () => {
  9. // $patch 修改 store 中的数据
  10. mainStore.$patch({
  11. name: "名称被修改了,nameLength也随之改变了",
  12. });
  13. };
  14. </script>

例如在 home->index.vue 中使用

  1. <template>
  2. <h1>这是 home 页</h1>
  3. <router-link :to="{path:'/helloWorld'}">跳转到helloWord(router-link)</router-link>
  4. <br/>
  5. <button @click="goHelloWordPage">跳转到 helloWord(js_function)</button>
  6. <br/>
  7. <div>这是状态管理Pinia:{{ mainStore.name }}<br />长度:{{ mainStore.nameLength }}</div>
  8. <button @click="updateName">修改 store 中的 name</button>
  9. </template>
  10. <script setup lang="ts">
  11. import {useRouter} from 'vue-router'
  12. import { useMainStore } from "@/store/main";
  13. const mainStore = useMainStore()
  14. const updateName = () => {
  15. // $patch 修改 store 中的数据
  16. mainStore.$patch({
  17. name: "名称被修改了,nameLength也随之改变了",
  18. });
  19. };
  20. // 2. 调用useRouter函数
  21. const $r = useRouter();
  22. const goHelloWordPage = () =>{
  23. $r.push("helloWorld")
  24. }
  25. </script>

环境变量配置

vite提供了开发模式(development)和生产模式(product) 

项目根目录创建开发环境   .enc.dev    文件,文件内容如下

  1. NODE_ENV=development
  2. VITE_APP_WEB_URL= 'https://www.baidu.com'

项目根目录创建生产环境   .enc.prod    文件,文件内容如下 

  1. NODE_ENV=production
  2. VITE_APP_WEB_URL='https://www.goole.com'

使用:在views->home->index.vue  中  添加

  1. <template>
  2. <p>当前环境:{{ env.NODE_ENV }}</p>
  3. </template>
  4. <script setup lang="ts">
  5. const env = import.meta.env
  6. </script>

 最后修改 pacakge.json  生效

  1. "scripts": {
  2. "dev": "vite --mode dev",
  3. "dev:prod": "vite --mode prod",
  4. "build": "vue-tsc && vite build",
  5. "build:dev": "vue-tsc --noEmit && vite build --mode dev",
  6. "build:uat": "vue-tsc --noEmit && vite build --mode uat",
  7. "build:prod": "vue-tsc --noEmit && vite build --mode prod",
  8. "preview": "vite preview"
  9. },

启动项目时:

npm run dev
npm run dev:prod     
不同的启动方式,环境变量值不同 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/272561
推荐阅读
相关标签
  

闽ICP备14008679号