解决html-webpack-plugin和html-loader冲突问题,支持嵌套引用

摘要:
发现html webpack插件和html加载器之间存在冲突。同时使用html webpack插件将导致html webpack插件的ejs模板语法无效,动态标题(htmlWebpackPlugin.options.title代码将直接输出到页面)失败,页面上使用js变量失败等;原因可能是原始的html模板在被html加载器处理后将变成字符串,并且配置被添加到webpack.config文件中:
1.问题

最近在使用webpack的过程中,发现html-webpack-plugin和html-loader有冲突,同时使用会导致html-webpack-plugin的ejs模版语法失效,无法动态标题(htmlWebpackPlugin.options.title代码会直接输出到页面上)、无法在页面使用js变量等; 如果放弃html-loader,只用html-webpack-plugin自带的ejs语法,又无法达到嵌套引用的效果,即引入的html中如果还有引入语法,会直接在页面输出代码,而不会引入页面进来。在网上查阅了很多资料,也没有找到太好的办法,原因大概是原始的html模板经过html-loader处理后会变成字符串,导致跳过ejs解析。

2.解决

尝试网上多种方案未果后,想到了一种方案,既然放弃html-loader,只用html-webpack-plugin自带的ejs语法,无法达到嵌套引用的效果,那么可不可以用ejs-loader去加载引入的文件,使用ejs语法去做嵌套引入?

1.安装ejs-loader

npm install ejs-loader -save-dev

2.将允许嵌套引入的模板文件后缀名改为.ejs,  在webpack.config文件中增加配置:

......
module: {
    rules:[
        {
	    test: /.ejs$/,
	    use: [ 
	        {
	    	    loader: 'ejs-loader',
	    	    options:{
	    	        esModule: false
	    	    }
	    	}
	    ]
	}
    ]
},
......

要注意如果不加“esModule: false”,编译时候会报错。

3.在html-webpack-plugin的模板文件中,以及.ejs文件中使用ejs语法引入其他文件,比如这样:

......
<body>
    <%= require('./header.ejs')() %>
    <%= require('./main.ejs')() %>
    <%= require('./footer.ejs')() %>
</body>
......

在header.ejs文件中也可以使用 <%= require('./xxx.ejs')() %> 这种语法引入其他代码。问题解决

 

免责声明:文章转载自《解决html-webpack-plugin和html-loader冲突问题,支持嵌套引用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇[UE4]Invalidation Box记 el-tabs el-tab-pane 中嵌套 router-view出现的问题下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JavaMail入门:创建纯文本、HTML格式的邮件

转自:http://haolloyin.blog.51cto.com/1177454/353849/ 在 http://java.sun.com/products/javamail/ 下载了 JavaMail 1.4.3 版本,如果所用 JDK 是 6.0 则不用再下载 activation 。下载得到的是 javamail-1.4.3.zip 的压缩包,...

QT MSVC中文编译出错error: C2001: 常量中有换行符 --- 解决方案

前言 这个问题一直存在,以前是妥协,现在实在是忍不了,不解决,强迫症都要犯了,于是百度了一下,看到有一篇文章是这样解决的,于是亲测,确实有效果,记录如下 正文 QT上用MSVC去编译部分含有中文的字符串时会出现编译错误 error: C2001: 常量中有换行符 ,但用MinGW就不会。需在后面加个正常的字符才能正常编译,但出现 了。其编码如下图,明...

MySQL日志系统(redo log、undo log、binlog)

1.redo log(重做日志) InnoDB引擎特有的日志   当数据库对数据做修改的时候,需要把数据页从磁盘读到buffer pool中,然后在buffer pool中进行修改,那么这个时候buffer pool中的数据页就与磁盘上的数据页内容不一致,称buffer pool的数据页为dirty page 脏数据,如果这个时候发生非正常的DB服务重启...

在CYGWIN下编译和运行软件Bundler ,以及PMVS,CMVS的编译与使用

本人按照 http://blog.csdn.net/zzzblog/article/details/17166869 http://oliver.zheng.blog.163.com/blog/static/1424115952011915113138431/这两篇文章运行,发现在我的电脑上有些地方运行不对。所以我按照我能运行的步骤重新写一下。 本人电脑是...

转:使用xhprof进行线上PHP性能追踪及分析

原文来自于:http://avnpc.com/pages/profiler-php-performance-online-by-xhprof 原创作者:AlloVince 之前一直使用基于Xdebug进行PHP的性能分析,对于本地开发环境来说是够用了,但如果是线上环境的话,xdebug消耗较大,配置也不够灵活,因此线上环境建议使用xhprof进行PHP性能...

Linux下Nodejs安装(完整详细)

node下载地址: http://nodejs.cn/download/ 首先去官网下载代码,这里一定要注意安装分两种,一种是Source Code源码,一种是编译后的文件。我就是按照网上源码的安装方式去操作编译后的文件,结果坑了好久好久。   (一) 编译好的文件     简单说就是解压后,在bin文件夹中已经存在node以及npm,如果你进入到对应文...