惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
S
Securelist
MyScale Blog
MyScale Blog
Jina AI
Jina AI
罗磊的独立博客
The Cloudflare Blog
美团技术团队
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
博客园 - 三生石上(FineUI控件)
月光博客
月光博客
雷峰网
雷峰网
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
大猫的无限游戏
大猫的无限游戏
博客园 - Franky
博客园 - 聂微东
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
T
Tailwind CSS Blog
Attack and Defense Labs
Attack and Defense Labs
博客园_首页
Latest news
Latest news
Apple Machine Learning Research
Apple Machine Learning Research
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
The Hacker News
The Hacker News
G
GRAHAM CLULEY
Simon Willison's Weblog
Simon Willison's Weblog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
P
Proofpoint News Feed
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
U
Unit 42
D
Docker
Webroot Blog
Webroot Blog
N
Netflix TechBlog - Medium
T
Tor Project blog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 最新话题
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The Last Watchdog
The Last Watchdog
B
Blog
Recent Announcements
Recent Announcements
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Security Latest
Security Latest
V2EX - 技术
V2EX - 技术
N
News | PayPal Newsroom
Microsoft Security Blog
Microsoft Security Blog

Vite

vite 通过局域网或者端口转发进行访问时特别慢。 - V2EX vite+vue3 有什么插件可以让编译后的 js 被加密保护吗。类似 jsjiami.com 那样 - V2EX vite 有什么插件会把 unicode 转成中文吗 - V2EX 请教: vite + electron.js + vue.js 3 开发桌面软件,无法在 renderer 中加载 C++ node module - V2EX 请教一个 vite 代理的问题 - V2EX 请问各位大佬一个 vite 插件的问题 - V2EX vite 设置生产环境 baseURL 为 /api/,真实请求会自动添加本机 ip 地址吗 - V2EX Vite 执行 build 时如何能够自动添加其他文件到 dist 文件夹? - V2EX element plus 按钮的问题,求帮助 - V2EX 问下前端大佬,VITE+ESLINT+VSCODE 在 编译阶段 不报错怎么解决? - V2EX vite+vue3+ts 自己搭建时候一些步骤及踩坑分享 - V2EX How to use Vite to build all kinds of TypeScript projects, including CSR/SSR/CDN/MonoRepository - V2EX 请问能否通过 vite 插件功能去修改项目中某一个文件的内容或者获取文件内容? - V2EX vite 应该怎么学? - V2EX vite 打包后,好好的功能报错了?有没有懂 vite 打包原理的大佬,求解一下 - V2EX Vite+React+TS+Eslint+Prettier starter kit - V2EX VitePress 如何创建自定义的 UI 主题 - V2EX
Vite + React + Ant Design + Tailwind CSS + ESLint + Prettier + TypeScript 最佳实践 - V2EX
nanxiaobei · 2022-08-11 · via Vite

很难过 Create React App 被时代淘汰,现在我们用 Vite 开发 React + Ant Design 吧。

很难过 CSS 被时代淘汰(明明没有好不好!),现在我们用 Tailwind CSS 吧。

很难过 yarn 被时代淘汰,现在我们用 pnpm 吧。

pnpm create vite my-react-app --template react-ts

https://vitejs.dev/guide/#scaffolding-your-first-vite-project

2. 按照提示进入项目,安装依赖:

cd my-react-app
pnpm install

3. 安装 Ant Design 相关依赖

pnpm add antd @ant-design/icons
pnpm add -D less vite-plugin-imp # 用于按需引入组件

https://ant.design/docs/react/introduce#Using-npm-or-yarn

4. 修改 vite.config.ts 为如下内容:

import { defineConfig } from 'vite';
import vitePluginImp from 'vite-plugin-imp';
import react from '@vitejs/plugin-react';

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    react(),
    vitePluginImp({
      optimize: true,
      libList: [
        {
          libName: 'antd',
          style: (name) => `antd/es/${name}/style`,
        },
      ],
    }),
  ],
  css: {
    preprocessorOptions: {
      less: {
        javascriptEnabled: true,
        // 如需定制 antd 主题,请取消以下内容注释 https://ant.design/docs/react/customize-theme
        // modifyVars: {
        //   hack: `true; @import "./src/theme.less";`,
        // },
      },
    },
  },
});

https://vitejs.dev/config/

5. 安装 Tailwind CSS 相关依赖

pnpm add -D tailwindcss postcss autoprefixer
npx tailwindcss init

Tailwind CSS ,用过都说好!几乎不用再添加 less/scss 文件,不用切换文件改完 CSS 再切回来,直接修改组件的 className 即可,"最短修改路径",便捷简洁现代化!(当然如果不想用可以不安装)

6. 按照 Tailwind CSS 官方指南配置

https://tailwindcss.com/docs/installation/using-postcss

注意:生成的 TypeScript 项目中,不支持 .js 配置文件,需使用 .cjs 文件。

touch postcss.config.cjs

postcss.config.cjs 内容:

module.exports = {
  plugins: {
    tailwindcss: {},
    autoprefixer: {},
  },
};

tailwind.config.cjs 内容:

/** @type {import('tailwindcss').Config} */
module.exports = {
  content: ['./src/**/*.{html,tsx}'],
  theme: {
    extend: {},
  },
  plugins: [],
};

重命名 index.cssmain.css,修改其内容为:

@tailwind base;
@tailwind components;
@tailwind utilities;

6. 安装 ESLint 相关依赖

pnpm add -D eslint eslint-config-react-app

https://github.com/facebook/create-react-app/tree/main/packages/eslint-config-react-app

虽然 create-react-app 被淘汰了,但它的 ESLint 规则还是最权威的,开发 React 项目的最佳规范!

7. 安装 Prettier 相关依赖

pnpm add -D prettier eslint-config-prettier @trivago/prettier-plugin-sort-imports

https://github.com/prettier/eslint-config-prettier
https://github.com/trivago/prettier-plugin-sort-imports

@trivago/prettier-plugin-sort-imports,一个非常好用的对 import 进行自动排序的 Prettier 插件,用了就回不去了!(当然如果不想用可以不安装)

8. 添加 .eslintrc.cjs

touch .eslintrc.cjs
module.exports = {
  extends: ['react-app', 'prettier'],
};

9. 添加 .prettierrc.cjs

touch .prettierrc.cjs
module.exports = {
  singleQuote: true,

  // 以下为 @trivago/prettier-plugin-sort-imports 配置,若未使用可删去
  // importOrder 中的文件顺序规范,可依据项目实际情况自行更改
  plugins: [require.resolve('@trivago/prettier-plugin-sort-imports')],
  importOrder: [
    '^vite',
    '^react',
    '^antd',
    '<THIRD_PARTY_MODULES>',
    'components/',
    'pages/',
    'hooks/',
    'utils/',
    '^[./]',
  ],
  importOrderSortSpecifiers: true,
  importOrderGroupNamespaceSpecifiers: true,
  importOrderCaseInsensitive: true,
};

10. 大功告成,试试吧!

删除 App.css,修改 App.tsx 文件为:

import { useState } from 'react';
import { Button } from 'antd';
import { AlertOutlined } from '@ant-design/icons';
import reactLogo from './assets/react.svg';

function App() {
  const [count, setCount] = useState(0);

  return (
    <div className="grid place-content-center h-screen text-center text-lg">
      <div className="flex mx-auto items-center gap-8">
        <a href="https://vitejs.dev" target="_blank" rel="noreferrer">
          <img src="/vite.svg" className="w-28" alt="Vite logo" />
        </a>
        <a href="https://reactjs.org" target="_blank" rel="noreferrer">
          <img
            src={reactLogo}
            className="w-32 animate-spin [animation-duration:10s]"
            alt="React logo"
          />
        </a>
      </div>
      <h1 className="my-20 font-semibold text-6xl">Vite + React</h1>
      <div>
        <Button
          className="inline-flex items-center rounded-md"
          size="large"
          icon={<AlertOutlined />}
          onClick={() => setCount((count) => count + 1)}
        >
          count is {count}
        </Button>
        <p className="mt-4 mb-12">
          Edit <code>src/App.tsx</code> and save to test HMR
        </p>
      </div>
      <p className="opacity-40">
        Click on the Vite and React logos to learn more
      </p>
    </div>
  );
}

export default App;

启动项目:

pnpm run dev

耶寺!点开本地开发链接看看效果吧!

附赠

以上 shell 命令的合订版:

pnpm create vite my-react-app --template react-ts
cd my-react-app
pnpm install

pnpm add antd @ant-design/icons
pnpm add -D less vite-plugin-imp tailwindcss postcss autoprefixer eslint eslint-config-react-app prettier eslint-config-prettier @trivago/prettier-plugin-sort-imports

npx tailwindcss init
touch postcss.config.cjs
touch .eslintrc.cjs
touch .prettierrc.cjs