在 vue 或者 react 前端项目中,我们经常会在入口模板文件 index.html 中看到用 %PUBLIC_URL%、<%= BASE_URL %>、<%= title %> 之类的变量插入。
但这似乎我们平时的 html 或者 javscript 压根没见过这类的写法,一时感觉超出了自己的知识盲区。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title><%= title %></title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
%PUBLIC_URL%
%PUBLIC_URL% 代表项目 public 静态资源文件夹的绝对路径,vite3 中 index.html 中的 URL 将被自动转换,因此不再需要 %PUBLIC_URL% 占位符了,文档。
一般用来设置网站的图标、logo或者全局css、js引用这些,如 。
对应 vite 中的 publicDir 配置,默认就是 public
<%= BASE_URL %>
项目根目录
要修改这个值,vue + webpack项目中 Vue CLI 3.3 之前的版本,配置:baseURl: '/static',Vue CLI 3.3 之后(包括3.3)的版本,配置:publicPath: '/static'。
这个值在开发环境下同样生效,这么改打包后是没问题了,但项目本地运行会报错,官方也给出了方案,只需要判断一下当前环境是生产环境还是开发环境,再设置不同的路径就可以了:
module.exports = {
publicPath: process.env.NODE_ENV === 'production'
? '/static/'
: '/'
}
ejs 模板语法
像我们在 html 代码中见到的 <%%>、<%=%>、<%:%> 这类语法,其实是 ejs模版语法,就是帮我们用 JavaScript 代码来生成 HTML 页面。
四种语法:
- 纯脚本标签
里面可以直接写 js 代码,用于书写流程控制语句,不输出任何内容。
<% xxx %>
<%
for (var i = 0; i < 10; i++) {
alert('hello world')
}
%>
- 输出经过 HTML 转义的内容
将数据输出到模板,如果输出的数据是HTML,则会被转义,如 '<'、'>'、'&' 等 html 字符,会被转义成字符实体:< > &
<%= xxx %>
- 输出非转义的内容
和上一个类似,不过不会被转义,通常用来输出富文本内容
<%- xxx %>
const html = '<p>我是周小黑</p>'
<h2><%- html %></h2>
- 引入其他模版
将相对于模板路径中的模板片段包含进来
<%- include('文件路径') %>
- 条件判断
<% if (condition1) {
%>
...
<% } %>
<% if (condition1) {
%>
...
<% } else if (condition2) {
%>
...
<% } %>
- 循环
<% for(var i = 0; i < arr.length; i++){
%>
<%= i %> <%= arr[i] %>
<% } %>
- 注释
EJS模板提供的注释方式,不会被作为模板内容编译输出
<%# xxx %>