Webpack 资源内联 如何内联js库、CSS、图片、字体等

关于资源内联

代码层面:

  • 页面框架的初始化脚本 如flexible
  • 上报相关打点 css、js的初始化以及加载完成的上报点的代码需要内联到html里面去
  • css内联避免页面闪动 首屏一般会内联css,避免页面闪动(代码层面的体验,初始化的内容)

请求层面 减少http请求

  • 小图片或者字体内联(url-loader)

raw-loader内联html和js

raw-loader原理是返回一个string插入到html

npm i raw-loader@0.5.1 -D

内联html

手机端开发的时候有大段meta信息,这个时候每个页面都是需要的,我们可以把meta片段拆出来
通过raw-loader内联进来

webpack默认使用EJS模板引擎,可以通过$符号引入

$(require('raw-loader!./meta.html'))

内联js

将lib-flexible内联进来,可能需要先加上babel-loader
raw-loader 源码只有十几行,使用的时候

<!-- 当前目录相对于node_modules的路径 -->
${require('raw-loader!babel-loader!../node_modules/lib-flexible/flexible.js')}

整体示例

<!DOCTYPE html>
<html lang="en">

<head>
    ${require('raw-loader!./meta.html')}
    <title>Document</title>
    <script>
        ${require('raw-loader!babel-loader!../node_modules/lib-flexible/flexible.js')};
    </script>
</head>

<body>
    <div id="root"></div>
</body>

</html>

css内联

有两种方案

  • style-loader
  • html-inline-css-webpack-plugin 更广泛

对于style-loader

{
    loader:'style-loader',
    options:{
        insertAt:'top', // 放在head标签里
        singleton:true // 所有的style标签合并成一个
    }
}
原文地址:https://www.cnblogs.com/ltfxy/p/15328229.html