Vue或者React项目打包成一个HTML文件(包含CSS,JS,svg,png,ttf,eot,woff等)

需求

  • 把所有文件打包成一个html文件
  • 项目环境:webpack4 + vue 2 +vue-cli 4
  • 使用vue-cli脚手架打包出来的问件,包括css,fonts(字体图标相关文件),img(png,svg等),js,html
    在这里插入图片描述
  • 最终配置完成打包后:
    在这里插入图片描述

配置vue.config.js

  • https://chastephp.com/js/202003/83.html
  • 引入两个插件
    • html-webpack-plugin
      • 我使用的版本 “html-webpack-inline-source-plugin”: “0.0.10”
      • 记得把项目中的路由分包(路由懒加载),的动态改为静态。
        Person = () => import('components/page/Person') 更换成 Person = require('components/page/Person').default 或者 import Person from 'components/page/Person';
    • html-webpack-inline-source-plugin
      • 我使用的版本 “html-webpack-plugin”: “^3.2.0”
	const HtmlWebpackPlugin = require('html-webpack-plugin');
	const HtmlWebpackInlineSourcePlugin = require('html-webpack-inline-source-plugin');

    chainWebpack: config => {
        // 打包所有文件内嵌到html里面
        //把图片转成base64 limit:1e5 => 100000 kb ,小于这个大小都会转成base64,大于就会用链接引用图片
        config.module
            .rule('images')
            .use('url-loader')
            .loader('url-loader')
            .tap(options => Object.assign(options, {esModule:false,limit: 1e5}));
        //把字体图标相关文件转成base64
        config.module.rule('fonts').use('url-loader')
            .loader('url-loader')
            .tap(options => Object.assign(options, {limit: 1e5}));
        //把svg转成base64
        const svgRule = config.module.rule('svg');
        svgRule.uses.clear();
        svgRule.rule('svg').use('url-loader')
            .loader('url-loader')
            .tap(options => ({esModule:false,limit:1e5}));
        config.plugin('inline-source').use(require('html-webpack-inline-source-plugin'));
        config.plugin('html').tap(args => {
            args[0].inlineSource = '(.css|.js$)';
            return args;
        });
    }

reac项目打包成一个一个HTML文件(包含CSS,JS,svg,png,ttf,eot,woff等)

  • 除了修改文件配置的位置不一样,其他一样

配置webpack.config.js

plugins:[
          new HtmlWebpackPlugin({
                template: 'public/index.html',
                inlineSource: '.(js|css)$'
            }),
            new HtmlWebpackInlineSourcePlugin()
        );
]

遇到的报错

遇到的问题一:

遇到的问题二:

  • 报错: Rule can only have one resource source (provided resource and test + include + exclude) in

  • 依赖版本

    "webpack": "^5.24.4"
    
    "@vue/cli-service": "~4.4.0",
    
    "html-webpack-inline-source-plugin": "^1.0.0-beta.1",
    
    "html-webpack-plugin": "^5.3.1"
    
  • 解决方法

    • 删除webpack,重新装以前的版本。
    • npm uninstall webpack
    • npm install webpack@^4.0.0 --save-dev

遇到的问题三:

  • 报错
    在这里插入图片描述

  • 网上的方法不太好使,大多数都是升级webpack,然后卸载node_modules 、package-lock.json 然后重新npm install

  • 版本不匹配造成的,于是降低插件版本

“html-webpack-plugin”: “^3.2.0”
“html-webpack-inline-source-plugin”: “0.0.10”

小结

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值