Browserify with require('fs')

时间:2013-05-19 22:32:46

标签: html5 node.js require html5-filesystem browserify

我试图在使用fs对象的文件上使用browserify。浏览后,require('fs')的调用不会被转换,require会返回{}

这有什么解决方法吗?我在stackoverlow和其他地方看到了一些建议,但似乎都没有完全实现。

我实际上希望使用browserify为我教授的课程创建一个谷歌网络打包应用程序。

提前致谢。

5 个答案:

答案 0 :(得分:43)

如果您想通过fs.readFileSync()来电内联文件内容,可以使用brfs

var fs = require('fs');
var src = fs.readFileSync(__dirname + '/file.txt');

然后做:

browserify -t brfs main.js > bundle.js

src将在编译时设置为file.txt的内容。

答案 1 :(得分:15)

如果您想使用browserify运行文件系统,可以安装npm。

npm install browserify-fs 

您可以在客户端访问fs对象 感谢

答案 2 :(得分:8)

浏览器应该使用哪个文件系统? HTML5文件系统与传统文件系统无法真正比​​较。它没有符号链接,只能在Web Workers外部异步访问。

所以答案是:自己编写一个抽象层,在Node.js中运行时可以依赖fs模块,在浏览器中运行时可以依赖HTML5 FS API。这些差异太大,无法为您翻译浏览器。

答案 3 :(得分:0)

对于谷歌的任何人来说,我对stringify转换运气好得多。

https://github.com/JohnPostlethwait/stringify

这里的答案令人沮丧(虽然不是不受欢迎)我将模板作为字符串导入到我的组件中,以节省templateUrl所购买的HTTP请求,并将它们保留在Javascript文件之外。

出于某些原因,brfs与babel的关系并不好,并且有很多需要注意的事情。

我根本无法让browserify-fs工作。

但是,在找到stringify转换后,它就像。

一样简单
import template from '../template.html'

const definition = { template }

component.directive('myDirective', () => definition)

为ES5用户翻译:

var template = require('../template.html')

component.directive('myDirective', function() {
    return {
        template: template
    }
})

答案 4 :(得分:0)

是否需要使用require(fs),您始终可以使用html5文件阅读器api来读取javascript文件。

window.onload = function() {
    var fileInput1 = document.getElementById('fileInput');
    if (fileInput1){
        fileInput1.addEventListener('change', function(e) {
            var file = fileInput1.files[0];
            var textType = /text.*/;

            if (file.type.match(textType)) {
                var reader = new FileReader();
                reader.onload = function(e) {
                    console.log(reader.result);
                  }    
                reader.readAsText(file);                    
            } 
        });
    }
}

您还必须在html端插入输入文件。