我试图在使用fs对象的文件上使用browserify。浏览后,require('fs')
的调用不会被转换,require
会返回{}
。
这有什么解决方法吗?我在stackoverlow和其他地方看到了一些建议,但似乎都没有完全实现。
我实际上希望使用browserify为我教授的课程创建一个谷歌网络打包应用程序。
提前致谢。
答案 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端插入输入文件。