Vite项目中使用Less步骤,详细使用示例

在 Vite 项目中使用 Less 非常简单,因为 Vite 内置了对 CSS 预处理器的支持。你不需要 安装额外的 Loader 或 Plugin,只需安装 less 依赖即可。

以下是详细的步骤和代码示例演示:

1. 安装 Less 依赖

在你的 Vite 项目根目录下运行以下命令:

bash 复制代码
# 使用 npm
npm install -D less

# 或使用 pnpm (推荐)
pnpm add -D less

# 或使用 yarn
yarn add -D less

⚠️ 注意 :只需要安装 less不要 安装 less-loader。Vite 原生处理预处理器,less-loader 是 Webpack 生态的产物,在 Vite 中无效且可能导致冲突。


2. 基本使用示例

创建 Less 文件
less 复制代码
// src/styles/variables.less
@primary-color: #409eff;
@border-radius: 8px;
@font-size-base: 14px;
less 复制代码
// src/styles/main.less
@import './variables.less';

.app-container {
  padding: 20px;
  font-size: @font-size-base;

  .title {
    color: @primary-color;
    border-radius: @border-radius;
    
    &:hover {
      opacity: 0.8;
    }
  }
}
在组件中引入
vue 复制代码
<!-- src/App.vue -->
<template>
  <div class="app-container">
    <h1 class="title">Hello Vite + Less</h1>
  </div>
</template>

<!-- 方式一:外部文件引入 -->
<style lang="less">
@import './styles/main.less';
</style>

<!-- 方式二:直接在 style 标签中写 Less(推荐) -->
<style lang="less" scoped>
@import './styles/variables.less';

.card {
  background: #fff;
  border-radius: @border-radius;
  padding: 16px;
  
  .card-title {
    color: @primary-color;
    font-size: @font-size-base + 2px;
  }
}
</style>
在 JS/TS 中直接导入 Less(Vite 特有)
ts 复制代码
// src/main.ts
import './styles/main.less'  // Vite 会自动编译并注入样式

3. 配置 Less 全局变量 / Mixin(无需手动 @import)

如果每个组件都要手动 @import './variables.less' 会很繁琐,可以通过 vite.config.ts 自动注入:

ts 复制代码
// vite.config.ts
import { defineConfig } from 'vite'

export default defineConfig({
  css: {
    preprocessorOptions: {
      less: {
        // ✅ 自动在每个 Less 文件顶部注入,无需手动 @import
        additionalData: `@import "@/styles/variables.less";`,
        
        // ✅ Less 编译器选项
        math: 'always',          // 数学运算模式
        javascriptEnabled: true, // 允许 JS 表达式(某些 UI 库需要)
        
        // ✅ 自定义函数 / 插件
        plugins: [],
      },
    },
  },
  
  // 确保 @ 别名生效
  resolve: {
    alias: {
      '@': '/src',
    },
  },
})

配置后,所有 <style lang="less">.less 文件都可以直接使用 @primary-color 等变量:

vue 复制代码
<style lang="less" scoped>
/* 无需再 @import variables.less */
.btn {
  color: @primary-color;       /* ✅ 直接可用 */
  border-radius: @border-radius;
}
</style>

4. 配合 Ant Design Vue / Element Plus 等 UI 框架

以 Ant Design Vue 为例,覆盖主题变量:

ts 复制代码
// vite.config.ts
export default defineConfig({
  css: {
    preprocessorOptions: {
      less: {
        javascriptEnabled: true, // ⚠️ Ant Design 必须开启
        modifyVars: {
          'primary-color': '#722ed1',
          'link-color': '#722ed1',
          'border-radius-base': '4px',
        },
        // 或者用 additionalData 引入自定义主题文件
        // additionalData: `@import "@/styles/antd-theme.less";`,
      },
    },
  },
})

5. 常见问题排查

问题 原因 解决方案
Cannot find module 'less' 未安装 less pnpm add -D less
@import 路径报错 别名未配置 resolve.alias 中配置 @
变量不生效 additionalData 语法错误 确保末尾有分号 ;
数学运算不工作 Less 4.x 默认行为变更 设置 math: 'always'
HMR 样式不更新 Less 文件未被正确追踪 重启 dev server,检查 import 路径

📋 总结清单

复制代码
✅ npm install -D less
✅ <style lang="less"> 或 import '*.less'
✅ vite.config.ts → css.preprocessorOptions.less
❌ 不要安装 less-loader
❌ 不需要额外 Vite 插件

以上就是在 Vite 中使用 Less 的完整流程。核心要点就是:只装 **less** ,配置走 **css.preprocessorOptions**,告别 loader

相关推荐
子兮曰16 小时前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰17 小时前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万17 小时前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝17 小时前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋17 小时前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁18 小时前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王952720 小时前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大20 小时前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师20 小时前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学21 小时前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端