[webpack] 如何把代码内联进html中?

Posted 大前端视野

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[webpack] 如何把代码内联进html中?相关的知识,希望对你有一定的参考价值。

我们平常在打包文件的时候,有时候需要把 js、css 等代码内联html 中,减少文件的请求,优化加载速度。

用过 fis 的同学应该对 __inline 语法比较熟悉,它就是用来把代码内联进 html 的,其实 webpack 也可以借助插件做到这一点的,本文就来介绍这样的一个插件 html-webpack-inline-source-plugin

相信你对 webpack 的 html-webpack-plugin 插件不陌生,我们经常用它来生成html文件。

而在这个插件的官方文档中,就推荐了我们这篇文章的主角  html-webpack-inline-source-plugin

html-webpack-inline-source-pluginhtml-webpack-plugin 的第三方扩展插件,通过增加一个 {inlineSource: 'regex string'} 选项来内联你的静态文件到 html 中。

安装

由于是 html-webpack-plugin 的扩展,所以需要先安装 html-webpack-plugin。

$ npm install --save-dev html-webpack-plugin html-webpack-inline-source-plugin

使用

在 webpack config 中引入:

var HtmlWebpackInlineSourcePlugin = require('html-webpack-inline-source-plugin');

在 webpack config 的 plugins 选项中添加插件:

plugins: [  
   new HtmlWebpackPlugin(),
   new HtmlWebpackInlineSourcePlugin() ]

这一步不会做任何事情,当你在 HtmlWebpackPlugin 的配置中增加一个 inlineSource 选项来匹配 css 和 js ,最终才会将资源内联到 html 中。如下:

plugins: [  
   new HtmlWebpackPlugin({        inlineSource: '.(js|css)$' // embed all javascript and css inline    }),  
   new HtmlWebpackInlineSourcePlugin() ]

我们通过一个实例来具体说明

// 引入各种需要的包

var webpack = require('webpack');
var path = require('path');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var HtmlWebpackInlineSourcePlugin = require('html-webpack-inline-source-plugin');
var ExtractTextPlugin = require("extract-text-webpack-plugin");
var autoprefixer = require('autoprefixer');
module.exports = {    entry: {        index:"./src/js/index.js"    },    output: {        path: "./dist/",        filename: "js/[name].js",        chunkFilename: "js/[name].js"    },    
   module: {        loaders: [            {                test: /\.less$/,                
               // 此处可以使用ExtractTextPlugin插件将css提取出来,也可以不用,而通过style-loader以css-in-js的方式内联进去。                // 但是更推荐单独提取出来,可以让样式表在头部就加载,优化体验。                loader: ExtractTextPlugin.extract([                    'css-loader',                    
                   'postcss-loader',                    'less-loader'                ])            },            {                
               // 编译es6                test: /\.js$/,                exclude: /node_modules/,                loader: "babel-loader"            }        ]    },    postcss: function () {        
               return [autoprefixer]; // 使用autoprefixer自动加前缀    },    plugins: [        
       new ExtractTextPlugin('style.css'), // 实例化提取css插件        new HtmlWebpackPlugin({ // 实例化生成html插件            title: 'title',            template: './src/index.html',            filename: './index.html',            inlineSource:  '.(js|css)$' : '',  // 插入到html的css、js文件都要内联            minify: {                removeComments: true,                collapseWhitespace: true            },            chunks: ["index"]        }),        
       new HtmlWebpackInlineSourcePlugin() // 实例化内联资源插件    ] };

以上是关于[webpack] 如何把代码内联进html中?的主要内容,如果未能解决你的问题,请参考以下文章

Webpack5静态资源内联

Webpack5静态资源内联

Webpack5静态资源内联

如何使用 webpack 设置内联 svg

HTML <span>标签

React:使用 Webpack 在 JSX 中内联 CSS 模块