Live Server 打开 .ejs 文件只显示源码是设计使然,因其仅为静态 HTTP 服务,不执行 ejs.render();需用 Express + ejs 搭建服务端渲染环境才能正确解析并展示 HTML。

Live Server 打开 .ejs 文件只显示源码,不是插件坏了,而是它根本没打算执行模板渲染——它压根不运行 Node.js,也不调用 ejs.render()。
为什么 Live Server 无法预览 EJS/Pug 页面
Live Server 是纯静态 HTTP 服务,只做文件托管,不加载任何服务端环境。当你右键“Open with Live Server”一个 index.ejs,浏览器拿到的是原始文本,甚至可能触发下载,因为响应头是 Content-Type: text/plain 或未识别的 MIME 类型。
- 常见错误现象:
Cannot GET /、页面空白、右键打开后弹出下载框、控制台无报错但内容未解析 - 别改
liveServer.settings.CustomBrowser或加 query 参数——这些对模板执行完全无效 - VSCode 本身不内置 EJS/Pug 解析能力;所有“实时预览”类插件(如
ritwickdey.liveserver)都遵循同一限制
想边写边看效果?必须搭轻量服务端
真正可行的路径只有一条:用 Express + ejs(或 pug)启动本地服务,并配合 nodemon 实现热重载。这不是过度设计,而是模板引擎的运行前提决定的。
- 目录结构必须规范:
views/存放index.ejs,不能放在项目根目录或src/下 -
app.set('views', './views')必须在app.set('view engine', 'ejs')之前调用,顺序错会导致Failed to lookup view -
res.render('index')不能写成res.render('index.ejs'),否则报ENOENT - 静态资源(CSS/JS)统一放
public/,通过app.use(express.static('public'))挂载
Pug 格式化容易崩?配对插件是关键
Pug 的缩进敏感性和混合语法(如 - if (user) + p= user.name)会让默认 Prettier 直接报 unexpected token 或破坏嵌套结构。这不是配置问题,是解析器不匹配。
- 必须安装
prettier-plugin-pug,并在.prettierrc中显式启用:"plugins": ["prettier-plugin-pug"] - 禁用
Prettier对.pug文件的默认处理:在设置中搜prettier.disableLanguages,把pug加进去 - 不要依赖
formatOnSave强行格式化未装插件的 Pug 文件——它大概率会把缩进全搞乱
别信“已启用”的模板插件图标
有些插件(如 digitalbrainstem.javascript-ejs-support)只提供语法高亮和 Emmet 支持,不参与运行时;它们显示“已启用”,但对预览毫无帮助。真正起作用的只有服务端逻辑,而非编辑器侧插件。
- 检查插件详情页的
Activation Events:若写着onLanguage:html或空值,说明它根本不监听.ejs文件的请求流程 - 运行
Developer: Toggle Developer Tools→ Console,刷新页面,看是否有require("ejs") is not defined类报错——这说明前端试图执行服务端代码 - 最可靠的验证方式:在终端跑
node app.js,访问http://localhost:3000。能渲染出来,才代表配置真正生效
复杂点不在代码量,而在于分清「编辑时支持」和「运行时执行」——前者靠插件,后者必须靠服务端。混淆这两者,是所有模板预览失败的根源。











