我尝试使用带有'temp'和'fs'模块的browserify,而我得到的只是这个糟糕的错误

时间:2014-08-24 15:22:10

标签: javascript node.js browserify

我尝试迁移节点项目以在浏览器中运行。项目(永远不要理解当下的原因)写入一个临时文件,使用带有与此类似的代码的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;
        }
    });
});

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

  

未捕获的TypeError:undefined不是函数

以下一行:

fs.open(filePath, RDWR_EXCL, 0600, function(err, fd) {

temp.open调用。

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

我找到了browserify-fs,并尝试了:

browserify -r fs:browserify-fs my-example.js -o bfied.js

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

任何建议的解决方案都将不胜感激:)如果无法进行此类迁移,我也很高兴知道..

谢谢!

1 个答案:

答案 0 :(得分:3)

我偶然发现了这篇文章,因为我觉得我试图和你完全一样。我不知道你到底在哪里,但我发现使用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个月才能得到答案;)这是偶然的,我碰巧偶然发现了你的问题,当没有答案时我的心就沉了下来。)

汤姆