You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求Node.js脚本:将_*.html片段合并到index.html指定位置

实现HTML片段合并的Node.js脚本

下面是满足需求的完整脚本,可直接运行:

安装依赖(可选,用原生fs可跳过)

如果想更便捷地匹配文件,先安装glob包:

npm install glob --save-dev

完整脚本代码

const fs = require('fs').promises;
const path = require('path');
const glob = require('glob');

// 配置项:修改为你的实际目录
const targetDir = './';
const indexHtmlPath = path.join(targetDir, 'index.html');
const fragmentFilePattern = path.join(targetDir, '_*.html');

async function mergeHtmlParts() {
  try {
    // 1. 查找所有下划线开头的HTML片段文件
    const fragmentFiles = await new Promise((resolve, reject) => {
      glob(fragmentFilePattern, (err, matches) => {
        err ? reject(err) : resolve(matches);
      });
    });

    if (!fragmentFiles.length) {
      console.log('未找到任何_*.html格式的片段文件');
      return;
    }

    // 2. 读取所有片段内容并建立标记映射
    const fragmentMap = new Map();
    for (const file of fragmentFiles) {
      const baseName = path.basename(file);
      // 从文件名提取标记:_nav.html → @nav
      const tag = `@${baseName.slice(1, -5)}`;
      const content = await fs.readFile(file, 'utf8');
      fragmentMap.set(tag, content.trim());
    }

    // 3. 读取原始index.html内容
    let indexContent = await fs.readFile(indexHtmlPath, 'utf8');

    // 4. 替换所有标记为对应片段内容
    fragmentMap.forEach((content, tag) => {
      // 用字符串拆分拼接替代正则,避免特殊字符问题
      indexContent = indexContent.split(tag).join(content);
    });

    // 5. 写入合并后的文件(直接覆盖原index.html,可修改路径保存新文件)
    await fs.writeFile(indexHtmlPath, indexContent, 'utf8');
    console.log('合并完成!index.html已更新');
  } catch (error) {
    console.error('合并过程出错:', error);
  }
}

// 执行合并
mergeHtmlParts();

原生fs适配(无需第三方包)

如果不想安装glob,把查找文件的代码替换成以下原生实现:

// 替换原有的fragmentFiles获取逻辑
const allFiles = await fs.readdir(targetDir);
const fragmentFiles = allFiles
  .filter(file => file.startsWith('_') && file.endsWith('.html'))
  .map(file => path.join(targetDir, file));

使用说明

  1. 将脚本保存为merge-html.js
  2. 配置targetDir为你的HTML文件所在目录
  3. 确保index.html中的标记与片段文件名对应:比如_nav.html对应index.html里的@nav行
  4. 运行脚本:node merge-html.js

注意事项

  • 若片段内容包含特殊字符(如正则元字符),使用字符串拆分拼接的方式替换更安全(脚本中已采用这种方式)
  • 若不想覆盖原index.html,可修改writeFile的路径,比如改为path.join(targetDir, 'index-built.html')

内容的提问来源于stack exchange,提问作者David

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 06:45:37