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

开发图片展示网站:如何在JavaScript中获取服务器目录文件名?

解决浏览器中'require is not defined'的问题

错误原因

require是Node.js专属的模块加载语法,浏览器环境没有内置这个功能,你直接在浏览器里运行这段Node.js代码必然会报错——而且浏览器出于安全限制,本身也不允许前端脚本直接读取本地文件系统。

解决方案

根据你的网站类型,选择对应的处理方式:

1. 纯静态前端网站

没法直接让浏览器读取本地./images文件夹,有两种替代方案:

  • 预生成图片列表JSON:先在Node.js环境下运行代码生成包含文件名的JSON文件,再让前端加载这个文件。
    生成JSON的Node.js代码:

    const fs = require('fs');
    // 过滤出图片格式文件(可根据需要调整后缀)
    const imageFiles = fs.readdirSync('./images').filter(file => /\.(jpg|png|gif|webp)$/i.test(file));
    // 将列表写入JSON文件,放在前端能访问的目录(比如public下)
    fs.writeFileSync('./public/image-list.json', JSON.stringify(imageFiles));
    

    前端加载代码:

    fetch('/image-list.json')
      .then(response => response.json())
      .then(files => {
        // 在这里处理图片文件名列表
        console.log('图片文件名:', files);
      });
    
  • 让用户选择文件夹(File System Access API):借助浏览器的文件系统API,让用户手动选择图片所在文件夹,从而获取文件名。

    async function loadImageNames() {
      try {
        const dirHandle = await window.showDirectoryPicker();
        const imageNames = [];
        // 遍历文件夹中的文件
        for await (const entry of dirHandle.values()) {
          if (entry.kind === 'file' && /\.(jpg|png|gif|webp)$/i.test(entry.name)) {
            imageNames.push(entry.name);
          }
        }
        console.log('图片文件名:', imageNames);
        // 后续处理逻辑
      } catch (err) {
        console.error('操作取消或出错:', err);
      }
    }
    
    // 绑定按钮触发(需要用户主动交互,浏览器不允许自动调用)
    document.querySelector('#select-folder-btn').addEventListener('click', loadImageNames);
    

2. 使用前端构建工具(Webpack/Vite等)

如果你的项目用了构建工具,可以利用其模块扫描能力自动获取图片文件名:

  • Vite环境:

    // 扫描images目录下的所有图片文件
    const imagePaths = import.meta.glob('./images/*', { eager: false });
    // 提取文件名
    const imageNames = Object.keys(imagePaths).map(path => path.split('/').pop());
    console.log('图片文件名:', imageNames);
    
  • Webpack环境:

    // 创建上下文,扫描images目录下的图片文件
    const imageContext = require.context('./images', false, /\.(jpg|png|gif|webp)$/);
    // 提取文件名
    const imageNames = imageContext.keys().map(key => key.split('/').pop());
    console.log('图片文件名:', imageNames);
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:46:43