webpack使用raw-loader内联静态资源失效

失效代码
<script>${ require('raw-loader!babel-loader!./page/demo.js') }</script>

原因及解决办法
由于html-webpack-plugin解析语法的改变,将${ "code" }写法改为了<%= "code" %>
将原有的写法改为新写法即可

// 由于html-webpack-plugin解析语法的改变,将${ "代码" }标识符改为了<%= "代码" %>
<script><%=require('raw-loader!babel-loader!./page/demo.js')%></script>

顺便说一下raw-loader@0.5.1,对比了一下raw-loader新版本的源码。发现问题出在导出语法上。
新版本的raw-loader,默认情况下,raw-loader生成使用ES模块语法的JS模块。

老版本 0.5.1
module.exports = function(content) {
    this.cacheable && this.cacheable();
    this.value = content;
    // 0.5.1导出方式
    return "module.exports = " + JSON.stringify(content);
}

新版本
function rawLoader(source) {
  const options = (0, _loaderUtils.getOptions)(this);
  (0, _schemaUtils.default)(_options.default, options, {
    name: 'Raw Loader',
    baseDataPath: 'options'
  });
  const json = JSON.stringify(source).replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029');
  // 将true 改为false
  const esModule = typeof options.esModule !== 'undefined' ? options.esModule : true;
  /*const esModule = typeof options.esModule !== 'undefined' ? options.esModule : false;*/
  // esModule 控制导出方式
  return `${esModule ? 'export default' : 'module.exports ='} ${json};`; 
}

兼容办法:在node_modules中找到raw-loader/dist/index中将esModule的默认值改为false即可

如图所示:

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值