如何将 Vue 项目打包为单个 HTML 文件并嵌入 Blogger 博客文章

冬伟酱_7517

冬伟酱_7517

2026-09-09

405人浏览

原创

如何将 Vue 项目打包为单个 HTML 文件并嵌入 Blogger 博客文章

本文介绍使用 html-bundler-webpack-plugin 将 vue cli 5 项目(含 html、js、css、图片等)完整内联打包为单个可直接嵌入 blogger 的 html 文件,无需外部资源依赖。

本文介绍使用 html-bundler-webpack-plugin 将 vue cli 5 项目(含 html、js、css、图片等)完整内联打包为单个可直接嵌入 blogger 的 html 文件,无需外部资源依赖。

在 Blogger(Blogspot)中嵌入交互式 Vue 应用时,无法部署独立的构建目录(如 /dist/js/app.js),仅支持通过 <script></script><style></style> 标签直接插入 HTML 片段。因此,必须将整个 Vue 应用——包括模板、逻辑、样式和静态资源(如图标、图片)——全部内联(inline)进一个 HTML 文件中。传统 vue-cli-service build 默认生成多文件结构,不满足此需求;而 html-bundler-webpack-plugin 正是为此场景设计的专业解决方案。

✅ 核心配置要点

该插件通过 Webpack 拦截所有资源引用(.js, .css, .scss, .png, .ico 等),将其自动转为 Data URL(Base64)或内联代码,并注入到最终 HTML 中。关键配置如下:

  • js.inline: true → 将入口 JS 打包后直接写入 <script></script> 标签;
  • css.inline: true → 将所有 CSS/SCSS 编译后写入 <style></style> 标签;
  • type: 'asset/inline' → 对图片、图标等静态资源启用 Base64 内联;
  • resolve.alias.vue → 显式指向 vue/dist/vue.esm-bundler,确保运行时不依赖全局 Vue 实例(适配 Blogger 环境);
  • 移除 html-webpack-plugin,由 HtmlBundlerPlugin 全权接管 HTML 构建流程。

? 示例 webpack.config.js(适配 Vue CLI 5)

// vue.config.js(注意:需禁用默认构建,改用自定义 Webpack 配置)
const path = require('path');
const { VueLoaderPlugin } = require('vue-loader');
const HtmlBundlerPlugin = require('html-bundler-webpack-plugin');

module.exports = {
  mode: 'production',
  entry: {}, // 不设 entry —— 由 HtmlBundlerPlugin 管理
  output: {
    path: path.join(__dirname, 'dist/'),
    clean: true,
  },
  resolve: {
    alias: {
      vue: 'vue/dist/vue.esm-bundler', // 必须!避免 runtime-only 错误
    },
    extensions: ['.ts', '.js', '.vue', '.scss'],
  },
  plugins: [
    new VueLoaderPlugin(),
    new HtmlBundlerPlugin({
      entry: {
        index: './src/index.html', // 主 HTML 入口(含 <script src="./main.ts">)
      },
      js: { inline: true },
      css: { inline: true },
      minify: 'auto',
    }),
  ],
  module: {
    rules: [
      {
        test: /\.vue$/i,
        use: ['vue-loader'],
      },
      {
        test: /\.(css|scss|sass)$/i,
        use: ['css-loader', 'sass-loader'],
      },
      {
        test: /\.(ico|png|jpe?g|gif|svg)$/i,
        type: 'asset/inline', // 所有图片/图标转 data-url
      },
      {
        test: /\.ts$/i,
        use: 'ts-loader',
        exclude: /node_modules/,
      },
    ],
  },
};</script>

? 提示:在 vue.config.js 中返回上述配置,并确保已安装对应 loader(npm install -D vue-loader css-loader sass-loader ts-loader html-bundler-webpack-plugin)。

html-ppt-to-pdf
html-ppt-to-pdf

将使用 `

` 约定的 HTML 幻灯片转换为高保真、矢量文本 PDF(使用 Playwright + Chromium 原生 PDF 功能)。

下载

? 输出效果(dist/index.html 片段)



  <meta charset="UTF-8"><link rel="icon" href="data:image/vnd.microsoft.icon;base64,iVBORw0KGgo..."><style>/* 编译后的 SCSS,含 PostCSS 处理 */ h1{color:#333} .button{padding:8px}</style><title>My Vue Widget</title><div id="app">
    <h1>{{ title }}</h1>
    @@##@@
    <my-button></my-button>
</div>
  <script>
    // 完整编译后的 ES Module 代码(含 Vue、组件、逻辑),已 Tree-shaking
    import { createApp, ref } from 'vue';
    const app = createApp({ setup() { return { title: ref('Hello Blogger!') }; } });
    app.component('my-button', { template: '<button>Click Me' });
    app.mount('#app');
  </script>

⚠️ 注意事项与最佳实践

  • Blogger 安全限制:Blogger 会过滤部分 <script></script> 标签(尤其含 document.writeeval)。确保 Vue 构建产物不含动态执行代码;建议使用 runtimeCompiler: false(默认)+ defineComponent + <script setup></script> 以提升兼容性。
  • Vue 版本对齐@vue/cli 5 默认使用 Vue 3,务必确认 vue/dist/vue.esm-bundler 可用;若使用 Composition API,需在 tsconfig.json 中启用 "moduleResolution": "bundler"
  • 字体与外部资源:Google Fonts 等 CDN 字体需手动内联 @import 或预下载为本地 .woff2asset/inline;禁止使用 @import url(...) 远程链接。
  • 调试技巧:开发阶段可临时关闭 minifyinline,验证资源路径是否正确;上线前务必开启 inline: true 并检查 dist/index.html 是否无任何 src=href= 外链。
  • 部署方式:复制 dist/index.html 全文(Ctrl+A → Ctrl+C),粘贴至 Blogger 编辑器的「HTML 视图」中即可——无需上传任何文件。

通过该方案,你获得的是真正“零依赖”的单文件 Vue 组件,既保留响应式交互能力,又完全符合 Blogger 的封闭式内容发布规范。对于轻量级可视化工具、计算器、投票按钮等嵌入式小部件,这是目前最稳定、可维护性最强的工程化路径。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

4026

5

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

2023.07.04

1029

3

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

2023.07.04

3924

6

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

2023.09.01

820

4

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.04

1696

5

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

2023.09.04

2965

4

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

2023.09.12

3853

6

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

2023.09.20

2440

5

java访问控制修饰符介绍
java访问控制修饰符介绍

java访问控制修饰符有四种,分别是public、protected、private、默认访问修饰符。详细介绍:1、public,public是最宽松的访问控制修饰符,被修饰的类、方法和变量可以被任何其他类访问,当一个类、方法或变量被声明为public时,它们可以在任何地方被访问,无论是同一个包中的类还是不同包中的类;2、protected修饰符等等。

2023.09.20

808

7

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 16.6万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.4万人学习