### [PHP 项目中 Vite 只处理 CSS 不写 JS?详解 Vite 必须同时引入 JS 入口的原理与配置](https://www.huociguo.com/article/1368) **Published:** 2026-09-14T12:25:12 **Author:** 米了 **Excerpt:** 在 PHP 老旧项目或纯后端渲染场景中,常误以为 Vite 仅用于编译 CSS。本文 Vite 的模块加载机制… 在 PHP 老旧项目或纯后端渲染场景中,常误以为 Vite 仅用于编译 CSS。本文 Vite 的模块加载机制,阐述为何即使只使用 CSS,也必须声明并引入 JavaScript 入口文件,并提供标准的 `vite.config.js` 配置方案,解决 304 缓存与 HMR 失效问题。 ![](https://api.huociguo.com/wp-content/uploads/2026/09/20260914202447039-141225727a-1.png "20260914202447039-141225727a-1") 随着前端工程化工具的迭代,Vite 凭借其极速的冷启动能力,逐渐成为替代 Webpack 的首选。在 Laravel、ThinkPHP 或原生 PHP 项目中接入 Vite 时,开发者常产生一个误区:如果页面只需要编译 Sass/Less 生成 CSS,是否可以不引入 JS 入口?答案是否定的。Vite 的运行强依赖于 ES Module 的入口检测,忽略 JS 会导致开发服务器无法正常工作。 ### 1️⃣ 为什么 Vite 强制需要 JS 入口? Vite 在设计上是一个**原生 ESM 构建工具**。它的核心逻辑在于: - **依赖预构建**:Vite 通过扫描 `index.html` 或指定的 JS 入口文件,分析 `import` 语法,将 `node_modules` 中的依赖转换为 ESM 格式。 - **模块图谱(Module Graph)**:Vite 的 HMR(热更新)功能是基于 JS 模块图谱实现的。如果只有 CSS,Vite 无法建立完整的依赖关系树,导致无法监听文件变化并推送到浏览器。 - **CSS 是副作用**:在 Vite 中,CSS 被视为 JS 模块的“副作用”(Side-effect)。当你在 JS 中 `import './style.css'`,Vite 才会处理该 CSS 文件并将其注入到 HTML 中。 ### 2️⃣ 正确的 PHP + Vite 配置姿势 即便你只关心 CSS,也必须建立一个“虚拟”的 JS 入口文件。 **步骤一:建立入口文件** 在项目中创建 `resources/js/main.js`(或 `src/main.js`): ```javascript // 即使不使用 JS 逻辑,也必须保留此文件作为 Vite 的入口锚点 import '../css/app.css'; // 指向你的 CSS 文件 ``` **步骤二:配置** `vite.config.js` ```javascript import { defineConfig } from 'vite'; import path from 'path'; export default defineConfig({ root: './', // 项目根目录 base: '/dist/', // 生产环境资源基础路径 build: { // 输出目录,PHP 需引用这里的文件 outDir: 'public/dist', assetsDir: 'assets', // 必须指定 rollup 的入口 rollupOptions: { input: { main: path.resolve(__dirname, './resources/js/main.js'), }, output: { // 确保 CSS 文件名不包含哈希(可选,视缓存策略而定) entryFileNames: `assets/[name].js`, chunkFileNames: `assets/[name].js`, assetFileNames: `assets/[name].[ext]` } } }, server: { // 允许 PHP 服务器通过 IP 访问 host: 'localhost', port: 5173, strictPort: true, } }); ``` ### 3️⃣ PHP 模板中的引入方式 在 PHP 视图文件(如 `header.php`)中,不能只写 `` 标签引入 CSS,而必须引入由 Vite 生成的 JS 入口。 **开发环境:** ```php ``` **生产环境:** ```php ``` ⚠️ **注意**:生产环境下,Vite 会自动将 JS 中导入的 CSS 提取出来,因此你需要同时保留 `