如何在document.ejs模板中引用.umi.js配置變量
document.ejs模板可以爲umi.js項目配置最爲基本的配置之一,可以理解爲index.html的入口。
我們知道原生的react組件,都是需要掛載到html中的指定dom元素中的。umi.js是基於react的,儘管基於umi.js來開發react項目,使代碼的邏輯更清晰,模塊化更透徹,可維護性更好,但是,本質還是react。
所以,我們還是能找到,且必須能找到一個react根模塊顯示的掛載到html的dom元素中。那麼,我們可以在這個document.ejs只找到這個掛載點,如下:
<body>
<div id="root"></div>
</body>
上面的有唯一的一個<div id="root">
,這就是整個react的項目的根組件掛載點
進入正題
react本質還是js,任何前端項目本質還是依賴html,js,css,這些幾乎沒變過,所以,有時我們需要想以往的項目一樣,引入一些靜態資源(js、css等),或者,設置一些<head>
中的共用dom元素如<meta>
,那麼就可以在這個doument.ejs
模板中設置。
然而,有時我們希望,從別的配置文件中,引入某些變量到doument.ejs
,以便開發或部署,那麼在umi.js項目中如何實現呢?
在這裏,umi.js提供的解決方案是,看代碼如下:
<!-- document.ejs -->
<script src="<%= context.config.publicPath %>/lib/my.js"></script>
那麼context.config
又是從哪裏來的呢,噹噹噹…,當然就是從 .umi.js
來的,我們看一下:
// .umi.js
export default {
publicPath: '/myPublic',
base: basePath,
hash: true,
ignoreMomentLocale: true,
targets: { ie: 9 },
treeShaking: true,
...
}
看到了吧,在這個.umi.js的配置文件的所有變量,在document.ejs中都可以通過context.config
來提取
提取的格式,只需要加上<%=context.config %>
就可以了