UMI针对特定页面指定模板

最近在使用UMI进行项目的构建,由于项目需要多个页面,每个页面都需要有特定的HTML模板。

根据 UMI 官方文档:

修改默认模板

新建src/pages/document.ejs,umi 约定如果这个文件存在,会作为默认模板,比如:




  
  Your App


  
配置模板

模板里可通过 context 来获取到 umi 提供的变量,context 包含:

  • route,路由信息,需要打包出多个静态HTML 时(即配置了 exportStatic 时)有效
  • config,用户配置信息
    比如:

关于针对特定页面指定模板

  • 网上的解决方法1:

通过配置路由的document属性,指定路由特定的document

routes: [
    { exact: true, path: '/a', component: '@/pages/a/index.tsx', title: 'a', document: './src/pages/a.ejs' },
    { exact: true, path: '/b', component: '@/pages/b/index.tsx', title: 'b', document: './src/pages/b.ejs'  },
  ],

此功能需开启 exportStatic配置,否则只会输出一个HTML 文件。
查阅UMI3.x路由文档,routes并不存在document属性,此方法无效。

  • 网上解决方法2:

约定式路由可通过注释扩展 document 属性,路径从项目根目录开始找

/**
 * document: ./src/documents/404.ejs
 */

这个路由就会以 ./src/documents/404.ejs 为模板输出 HTML。
查阅UMI3.x约定式路由文档,并未找到此方法,同时也尝试过,此方法无效。

  • 最后解决方法3:

维持一个document.ejs,在此模板的基础上,使用context进行模板区分

<% if(context.route.path==='/a') { %>
  

a模板

<% } else {%>

b模板

<% } %>

通过context.route.patch获取到当前路由,再使用if-else语句判断
注意:使用这方法需要exportStatic: { htmlSuffix: false },只输出一个html,访问的路由变成/a.html变成/a

你可能感兴趣的:(UMI针对特定页面指定模板)