最近在看关于 vite 如何处理 css 文件时,遇到了官方的这段描述
原文链接:https://vite.dev/guide/features
vite 已经内部支持了 .scss
这些 css 预处理器,但是 vite 还需要我们再次安装它们。
问题: 既然已经内置了,为什么还需要手动再安装呢?这和我之间 pnpm install scss
有什么区别呢?我既然已经手动安装了,那么我自然可以使用这些处理器了啊? vite 在这个环节又做了什么呢?感觉有点前后矛盾?
最近在看关于 vite 如何处理 css 文件时,遇到了官方的这段描述
原文链接:https://vite.dev/guide/features
vite 已经内部支持了 .scss
这些 css 预处理器,但是 vite 还需要我们再次安装它们。
问题: 既然已经内置了,为什么还需要手动再安装呢?这和我之间 pnpm install scss
有什么区别呢?我既然已经手动安装了,那么我自然可以使用这些处理器了啊? vite 在这个环节又做了什么呢?感觉有点前后矛盾?
### 回答
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 预处理器文件可以被正确地编译和集成到你的项目中。
这里的意思是:
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
2 回答4.3k 阅读✓ 已解决
4 回答4.6k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
4 回答2.1k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
原题描述本身就不成立,截图里的文档只是说明支持这些后缀名的文件而已……
用脚手架写项目写多了的 FEers 们都有个错觉,仿佛任何文件都能
import
进来似的。可你要丢掉这些工具,从零开始写一个 node 项目,你就会发现,其实 node 只支持你import
两种文件:.js
(.cjs
/.mjs
算变体)和.json
,别的一概不认。可你再瞅瞅自己的项目里:
这些其他类型的文件照样 import 写的飞起。
你就从来没好奇过为啥 node 不支持的文件类型、用这些 bundler 却都支持了吗?
以前 Webpack 时代干这这事儿的玩意儿叫 loader,现在 rollup/vite 里叫 plugin,本质都是一回事儿。Webpack 没内置任何 loader,任何其他类型的文件全都需要你单独安装对应的 loader;vite 内置了一些常见文件的 plugin,不需要额外单独安装,就这么点儿区别。
但 loader 就是 loader,哪怕它叫 plugin 了也一样,它只干 load 这一件事儿。预处理并不是它的工作职责,你用谁家的预处理器了依然需要单独安装它。