vite 内部支持 .scss .sass 这些文件,为什么还需要再次 install 它们呢?

最近在看关于 vite 如何处理 css 文件时,遇到了官方的这段描述
原文链接:https://vite.dev/guide/features
image.png


vite 已经内部支持了 .scss 这些 css 预处理器,但是 vite 还需要我们再次安装它们。

问题: 既然已经内置了,为什么还需要手动再安装呢?这和我之间 pnpm install scss 有什么区别呢?我既然已经手动安装了,那么我自然可以使用这些处理器了啊? vite 在这个环节又做了什么呢?感觉有点前后矛盾?

阅读 1.6k
avatarAI BotBETA
### 回答

Vite 本身并不直接包含 `.scss` 或 `.sass` 等 CSS 预处理器的解释器或编译器。Vite 官方文档中所说的“内部支持”指的是 Vite 提供了处理这些文件的插件接口和配置方式,使得集成这些预处理器变得更加容易。然而,实际的预处理器逻辑(如将 SCSS 编译为 CSS)是由相应的 npm 包(如 `sass` 或 `node-sass` 对于 `.scss` 文件,`dart-sass` 的 npm 包也可以)来完成的。

因此,当你使用 `.scss` 或 `.sass` 文件时,你需要手动安装对应的预处理器包,因为 Vite 需要依赖这些包来执行实际的编译工作。例如,如果你使用 SCSS,你需要运行 `npm install sass` 或 `yarn add sass` 来安装 Dart Sass,这样 Vite 才能利用这个包来编译你的 SCSS 文件。

你提到的 `pnpm install scss` 实际上是不正确的,因为 `scss` 不是一个 npm 包名。正确的包名应该是 `sass`(Dart Sass 的官方实现)或 `node-sass`(一个基于 LibSass 的 Node.js 封装,但需要注意 LibSass 已经被废弃)。

简而言之,Vite 提供了处理 CSS 预处理器文件的框架,但你需要安装实际的预处理器实现才能编译这些文件。Vite 在这个环节的作用是配置和调用这些预处理器包,以确保你的 CSS 预处理器文件可以被正确地编译和集成到你的项目中。
2 个回答
image.png

原题描述本身就不成立,截图里的文档只是说明支持这些后缀名的文件而已……


用脚手架写项目写多了的 FEers 们都有个错觉,仿佛任何文件都能 import 进来似的。可你要丢掉这些工具,从零开始写一个 node 项目,你就会发现,其实 node 只支持你 import 两种文件:.js.cjs/.mjs 算变体)和 .json,别的一概不认。

可你再瞅瞅自己的项目里:

import "foo.css";
import "bar.less";
import img from './baz.png';

这些其他类型的文件照样 import 写的飞起。

你就从来没好奇过为啥 node 不支持的文件类型、用这些 bundler 却都支持了吗?

以前 Webpack 时代干这这事儿的玩意儿叫 loader,现在 rollup/vite 里叫 plugin,本质都是一回事儿。Webpack 没内置任何 loader,任何其他类型的文件全都需要你单独安装对应的 loader;vite 内置了一些常见文件的 plugin,不需要额外单独安装,就这么点儿区别。

但 loader 就是 loader,哪怕它叫 plugin 了也一样,它只干 load 这一件事儿。预处理并不是它的工作职责,你用谁家的预处理器了依然需要单独安装它。

这里的意思是:

  1. vite 支持你在代码当中使用这些特殊的样式文件。浏览器本身是不支持的。
  2. vite 认得这些文件,并且会自动调用对应的工具来转译这些文件。
  3. 但是 vite 并不包含语法解析之类的功能,所以需要你安装对应的转译工具。
  4. 对比 webpack,你不仅需要安装转移工具,还要安装对应的 loader,还得完成配置才行。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题