我相信您使用它的目的与本意相反。
在控制器中,您可以像这样定义要包含的外部脚本和样式
res.render('page-one', {
title: 'Page One',
data: pageData,
libs: ['page-one', 'utils'],
styles: ['page-one']
});
在您的应用的静态资产中,您有一个 js 文件夹和一个 css 文件夹
|- static/
|- css/
|- fonts/
|- img/
|- js/
favicon.ico
|- templates/
在您的 js 文件夹中,放置文件 page-one.js 和 utils.js
在您的 css 文件夹中,您放置文件 page-one.css
在 ejs 模板中 html 的 head 部分
<!-- styles included on all pages -->
<link rel="stylesheet" href="/css/bootstrap.css">
<!-- styles specific to individual pages -->
<% if (typeof styles !== 'undefined') { %>
<% if (styles.length > 0) { %>
<% for (let style of styles) { %>
<link rel="stylesheet" href="/css/<%= style %>.css">
<% } %>
<% } %>
<% } %>
通常最好的做法是在结束正文标记处包含脚本,这样它们就不会在您的 ejs 文件中结束正文标记之前阻止页面呈现
<!-- scripts included on all pages -->
<script src='/js/libs/jquery.min.js' type='text/javascript'></script>
<!-- page specific scripts -->
<% if (typeof libs !== 'undefined') { %>
<% for (let lib of libs) { %>
<script src='/js/<%= lib %>.js' type='text/javascript'></script>
<% } %>
<% } %>
</body>
当您的页面呈现时,它将自动呈现脚本和 CSS
如果您没有在控制器中定义任何包含,则 if 块。
在您的 Express 应用程序中,您可以定义静态和外部脚本,如下所示
记得上面我们在名为 static 的目录中创建了 js 和 css 文件夹
// Define static assets
app.use(express.static('static'));
// included on all pages
app.use('/js/libs', express.static(path.join(process.cwd(), 'node_modules/jquery/dist'), { maxAge: 31557600000 }));
最后,如果您绝对必须在模板中包含 JavaScript,例如使用特殊的 ejs 标签呈现 JSON 数据等
<% if (jsonData) { %>
<script id="jsonData">var jsonData=<%- JSON.stringify(jsonData) %>;</script>
<% } %>