前端迅速上手

这里记录前端的迅速上手.

可能十年前这里记录的是 jQuery 相关的技术, 而现在记录比较更现代的技术.

这里可以看到fnm比nvm快45倍, 而且跨平台. 所以我准备切换到 fnm

  1. 下载二进制 Releases · Schniz/fnm
  2. 放到 path 路径下
  3. 配置 bash/zsh/fish 的环境变量

shell

# 使用特定的源
export FNM_NODE_DIST_MIRROR=https://mirrors.ivolces.com/nodejs-release/
# 或者 --node-dist-mirror https://mirrors.aliyun.com/nodejs-release/

# 安装lts版本
fnm install --lts
# 指定默认的版本
fnm default lts-latest
# 查看
fnm ls

# 使用特定版本
fnm use default
fnm use v20.11.1

# 当前使用
fnm current

下载 nvm-windows 管理不同 nodejs 的版本

powershell

# 展示可用的版本
nvm list available

# 安装指定大版本
nvm install 18
# 指定小版本
nvm install 18.16.0
# 使用版本
nvm use 18.16.0

# 已安装的版本
nvm list 


# 不推荐使用winget,经常版本切换的情况下
# 安装nodejs稳定版
winget install OpenJS.NodeJS.LTS

powershell

# 配置镜像源
npm config set registry https://registry.npmmirror.com
# 加速二进制文件下载
npm i --registry=https://registry.npmmirror.com --disturl=https://npmmirror.com/dist

# 这个节省磁盘,速度快。更新也是一样的命令,降级用pnpm@1.1.1这样
npm i -g pnpm
# 安装ts
npm i -g typescript
# web框架
npm i -g @nestjs/cli

# 查看全局安装的包
npm list -g

# pnpm开始代替npm
pnpm add xxx
pnpm update
pnpm list
pnpm remove
npx => pnpm dlx

快速上手 | Vue.js (vuejs.org)

powershell

# 创建项目,默认叫vue-project
pnpm create vue@latest [vue-project]
# 启用ts,vue-router,pinia,eslint,prettier,extension for debug
# 禁用jsx,vitest,end to end test

# 进入文件夹
cd vue-project
# 安装依赖
pnpm i
# 启动
pnpm run dev

# 构建html,输出内容在dist内
pnpm run build

# 查看是否有过期的包
pnpm outdated
# 更新包,加上--dev可以更新开发依赖
pnpm update

primevue 有 styled 和 unstyled 模式 2 种, 都可以和 tailwindcss 配合使用.

  • 推荐 styled 适合只需要进行微调的, 它有默认样式, 也可以通过 tailwindcss 覆盖来自定义
  • unstyled 适合完全自己画 UI. 它可以完全没有任何样式, 使用 presets 快速应用主题, 也还是会需要自己调整 body 背景颜色.

styled 实践

shell

# 先创建vue项目
# 安装依赖
pnpm add primevue @primevue/themes


# 自动导入
pnpm add @primevue/auto-import-resolver unplugin-vue-components -D
# vim vite.config.js
import Components from 'unplugin-vue-components/vite'
import { PrimeVueResolver } from '@primevue/auto-import-resolver'
export default defineConfig({
  plugins: [
    Components({
      resolvers: [PrimeVueResolver()]
    })
  ]
})


# main.ts引入使用
import { createApp } from 'vue';
const app = createApp(App);
# 修改主题颜色
import Aura from '@primevue/themes/aura'
import { definePreset } from '@primevue/themes'
const MyPreset = definePreset(Aura, {
  semantic: {
    primary: {
      50: '{indigo.50}',
      100: '{indigo.100}',
      200: '{indigo.200}',
      300: '{indigo.300}',
      400: '{indigo.400}',
      500: '{indigo.500}',
      600: '{indigo.600}',
      700: '{indigo.700}',
      800: '{indigo.800}',
      900: '{indigo.900}',
      950: '{indigo.950}'
    }
  }
})
# 引入使用
import PrimeVue from 'primevue/config'
app.use(PrimeVue, {
  theme: {
    preset: MyPreset,
    options: {
      prefix: 'p',
      darkModeSelector: '.p-dark',
      cssLayer: {
        name: 'primevue',
        order: 'tailwind-base, primevue, tailwind-utilities'
      }
    }
  }
})


# 配置tailwindcss
# 安装依赖
pnpm add -D tailwindcss postcss autoprefixer
# 创建文件 tailwind.config.js 和 postcss.config.js
npx tailwindcss init -p
# 配置tailwind.config.js的content
export default {
  content: ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'],
}

# main.css内容
# 不同于tailwindcss,内容来自 https://primevue.org/tailwind/#override
/* @tailwind base;
@tailwind components;
@tailwind utilities; */

@layer tailwind-base, primevue, tailwind-utilities;
@layer tailwind-base {
  @tailwind base;
}
@layer tailwind-utilities {
  @tailwind components;
  @tailwind utilities;
}

# 在main.ts里引用
import './assets/main.css'

# tailwind.config.js
pnpm add tailwindcss-primeui
import tpp from 'tailwindcss-primeui'

export default {
  plugins: [tpp]
}



# 示例
<h1 class="text-3xl font-bold underline"> Hello world! </h1>
<InputText placeholder="Overriden" class="p-8" />
<Button label="切换主题" @click="theme"></Button>

import Button from 'primevue/button';
import InputText from 'primevue/inputtext';
const theme = () => {
  document.documentElement.classList.toggle('p-dark')
}

unstyled 实践 #todo/笔记

powershell

# unstyled
pnpm add primevue

import PrimeVue from 'primevue/config'
import Aura from '@/presets/lara'
app.use(PrimeVue, {
  unstyled: true,
  pt: Aura
})

pnpm add tailwindcss-primeui
vim tailwind.config.js

import tpp from 'tailwindcss-primeui'
module.exports = {
    ...
    content: [
        "./presets/**/*.{js,vue,ts}",
    ],
    plugins: [tpp]
}

nuxt 是 vue 的全家桶。同时通过约定大于配置,帮助迅速开发。

Installation · Get Started with Nuxt

powershell

# 创建项目
pnpm dlx nuxi@latest init nuxt-project

# 运行
pnpm dev

# 静态页面
pnpm generate
# 文件内容在 .output\public

# 构建ssr 
# build以后启动 node .output/server/index.mjs
pnpm build
# pm2守护进程运行起来
# https://nuxt.com/docs/getting-started/deployment#pm2

Nestjs 是 nodejs 服务端的 web 框架

shell

# 新建项目
nest new nest-project

传统 web 项目的 launch.json

json

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "启动程序",
            "runtimeExecutable": "pnpm",
            "runtimeArgs": [
                "run",
                "start:dev"
            ],
            "console": "integratedTerminal"
        }
    ]
}

typescript 的 launch.json

json

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "启动程序",
      "preLaunchTask": "tsc-build",
      "program": "dist/main.js"
    }

    // 终端运行 tsc --watch , 就不需要preLaunchTask了
    // {
    //   "type": "node",
    //   "request": "launch",
    //   "name": "启动程序",
    //   "program": "dist/main.js"
    // }
  ]
}

配合这里使用 tasks.json

json

{
  "version": "2.0.0",
  "tasks": [
    {
      "type": "typescript",
      "tsconfig": "tsconfig.json",
      "problemMatcher": ["$tsc"],
      "group": {
        "kind": "build",
        "isDefault": true
      },
      "label": "tsc-build"
    }
  ]
}

js

// 在*.d.ts文件中
// 引入函数,对象
import { WebDAVClient, WebDAVClientOptions } from "./types.js";
// 声明函数的接口,但是实现在别的模块或文件中
export declare function createClient(remoteURL: string, options?: WebDAVClientOptions): WebDAVClient;

// 导出函数,说明createClient方法在factory.js中
export { createClient } from "./factory.js";

看了一下市面上的 ui 组件和生态

  • vben 太重了,模板不更新. 也是 tsx
  • pure-admin 前 element 团队员工, admin 模板会永远同步最新瘦身版
  • tdesign vite 更新不及时.  表格 tsx
  • arco tsx 淘汰

最终还是选择了 element-plus ,并且 自己写后台.

  • 因为用的人多, 踩过的坑基本都才过了.
  • 现成的 admin 基本上都要改动不少后端内容.

因为现在用 Vue, 所以可以看看 官方挑的UI库. 其中我选择支持 tailwindcss教程 的, 因为方便自己调整样式,且生态很好.

选择适用 PrimeVue and Tailwind

  • 因为有相关的 js, 例如 toast, 而 daisy 没有
  • 从 2008 年开始, 历史悠久, 有商业支持
  • 相关适用参考 我的tailwindcss笔记

同时还看了一下 react 的 ui 库.

powershell

# nuxt初始化的时候,如果npm -v版本高于6,就会卡柱
npx nuxi@latest init nuxt-project
# 降级
npm install -g npm@6

不得不说前端的问题是真的多… 参考 这个问题 就会发现, 很多人都踩过坑. 但还是会浪费你的时间

shell

du64.exe not found at D:\code\js\learn\nuxt-project\node_modules\fast-folder-size\bin\du64.exe
downloading du.zip from https://download.sysinternals.com/files/DU.zip
if you have trouble while downloading, try set process.env.FAST_FOLDER_SIZE_DU_ZIP_LOCATION to a proper mirror or local file path

手动处理

powershell

# 下载文件,配置环境变量.重新运行命令
$env:FAST_FOLDER_SIZE_DU_ZIP_LOCATION = "C:\Users\80542\Downloads\DU.zip"