我正在尝试迁移一个 Node 项目以在浏览器中运行。该项目(暂不考虑原因)写入临时文件,使用 temp 和类似于以下的代码:

var temp = require('temp');
var fs = require('fs');

temp.open('helloworld.txt', function (err, info) {
    if (err) {
        console.log('Failed to open a temp file:', err);
        return;
    }

    console.log('temp: ', info.path);
    fs.writeFile(info.path, 'Hello World!', function (err2) {
        if (err2) {
            console.log('Failed to write to a temp file:', err2);
            return;
        }
    });
});

运行浏览器代码时,出现以下错误:



对于以下行:
fs.open(filePath, RDWR_EXCL, 0600, function(err, fd) {

temp.open 调用。

我非常清楚你不能在浏览器中使用普通的 ol' javascript 编写文件,但我想知道 browserify 是否有一些替代品,特别是因为我们正在谈论一个临时文件。

我找到了 browserify-fs ,并尝试:
browserify -r fs:browserify-fs my-example.js -o bfied.js

但我得到了完全相同的错误。我试图用 require('fs') 替换 require('browserify-fs') 但这也导致了类似的错误(我当然安装了 browserify-fs 模块..)

任何建议的解决方案将不胜感激:) 如果这种类型的迁移是不可能的,我也很高兴知道..

谢谢!

最佳答案

我偶然发现了这篇文章,因为我认为我正在尝试做与您几乎完全相同的事情。我不确定你从哪里得到了这个,但我发现在使用 browserify-fs 时,你无法访问浏览器沙盒状态之外的文件。

所以当尝试...

var fs = require('broserify-fs);
fs.read('hello.txt', 'utf8' ....

我和你有同样的错误,但是当这样做时......
fs.mkdir('/home', function() {
    fs.writeFile('/home/hello-world.txt', 'Hello world!\n', function() {
        fs.readFile('/home/hello-world.txt', 'utf-8', function(err, data) {
            console.log(data);
        });
    });
});

一切正常(我认为只使用临时文件)。

我对此非常陌生,所以我不确定最好的方法是什么。我想你要么想在本地运行一个 Node.js 服务器并向它发出 ajax 命令来执行读/写操作,要么调查 HTML5 文件系统的东西 - 这看起来是一篇好文章 - http://www.html5rocks.com/en/tutorials/file/dndfiles/

希望这对您有所帮助(抱歉,您必须等待 2 个月才能得到答案;)偶然发现您的问题,当没有答案时,我的心沉了下去)

汤姆

关于javascript - 我尝试将 browserify 与 'temp' 和 'fs' 模块一起使用,但我得到的只是这个糟糕的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25473213/

10-15 07:30