【问题标题】:How to use fs.readdirSync when using browserify使用browserify时如何使用fs.readdirSync
【发布时间】:2022-01-01 22:27:46
【问题描述】:

我正在尝试获取目录中所有文件名的列表,然后将其打印在 HTML 页面上。由于我打算将其用于 HTML 页面,因此我使用 browserify 来捆绑我的脚本代码,以便能够使用“require”函数。

我正在运行的脚本如下所示:

let box = document.getElementById("displayhere");
var fs = require('fs');

let pathname = "./ElementImages";

var files = fs.readdirSync(pathname);
box.innerHTML = files;

当我运行它时,会出现一条错误消息 - 未捕获的 TypeError:fs.​​readdirSync 不是函数。有没有办法解决这个问题?

【问题讨论】:

标签: javascript html browserify fs


【解决方案1】:

不,它无法修复。 Browserify 允许您在浏览器中提供模块在作为可执行文件运行时不依赖于 node 提供的核心模块。使用fs 模块的File system 访问就是这样一个核心模块。

虽然您也许可以在客户端 HTML 中尝试草稿文件 API,但您需要 user interaction to select a directory from a picker 使用 https 1 为页面提供服务 - 如果您'在本地 machine 网络上运行节点,可能需要使用 openSSL 创建未签名的安全证书。但是,如果您走这条路,用户将需要接受未签名的安全证书,以及正确选择图像目录,以及使用支持尚未标准化的 File API 的浏览器。


1感谢@connexo 的评论更新

showDirectoryPicker 文档当前状态

此功能仅在安全上下文 (HTTPS) 中可用

然而,localHost 在这方面被基于 Chromium 的浏览器视为“安全上下文”。因此,支持浏览器不需要创建安全证书并使用 HTTPS 运行 localHost 服务器(注意 Firefox 尚未实现 File API)。

如果没有用户通过单击或手势事件进行交互,则无法在 JavaScript 中以编程方式打开目录选择器。一些尝试在各种浏览上下文中打开目录选择器的测试代码(在沙盒文档中不起作用):

<!DOCTYPE html>
<html><head><meta charset="utf-8">
   <title>Dir Picker</title>
</script>
</head>
<body>
<button type="button" onclick="pick()">Show Directory Picker</button><br>
Did a directory picker open automatically? - See console if not.

<script>"use strict";
async function getDir() {
  const dirHandle = await window.showDirectoryPicker();
  //  console.log(dirHandle);
}
const pick= ()=> {
    getDir()
   .then(()=>console.log("Picker opened!"))
   .catch(err=>console.error("Failed to open picker from inline script:\n" + err.message
      + "\nuserAgent: " + navigator.userAgent));
}
pick(); // automatic attempt
</script>
</body>
</html>

虽然这篇文章没有详细介绍如何创建 HTML 页面,但获得的结果将用于另一个 HTML 页面。根据使用的基础设施,您可以

  • 在节点中生成目录列表。如果您需要将其作为 HTML 页面提供,请在服务器上创建一个 HTML 页面来执行此操作。

  • 使用lsdir 命令在终端中手动生成列表,具体取决于操作系统,将输出定向到文件并文本处理结果。

【讨论】:

  • 据我所知,localhost127.0.0.1 被认为是关于 Web API 的安全上下文
  • @connexo 感谢您的提示! Firefox(我的首选浏览器)目前还不支持 File API,所以我会记住它以备将来使用。没有考虑在 Edge 中进行测试 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
相关资源
最近更新 更多