Browserify с require('fs'))

Я пытался использовать browserify в файле, который использует объект fs. Когда я browserify это вызов require('fs') не трансформируется и require возвращает {}.

есть ли обходной путь для этого? Я видел некоторые предложения по stackoverlow и в других местах, но ни один из них, похоже, полностью не реализован.

Я на самом деле надеялся создать веб-приложение google, используя browserify для класса, который я преподаю.

спасибо заранее.

5 ответов


какую файловую систему должен использовать браузер? Файловая система HTML5 на самом деле не сопоставима с традиционной файловой системой. Он не имеет символических ссылок, и он доступен только асинхронно вне веб-работников.

Итак, ответ: напишите слой абстракции самостоятельно, который может полагаться на модуль fs при запуске в узле.js и HTML5 FS API при запуске в браузере. Различия слишком велики, чтобы browserify перевести для вас.


если вы хотите встроить содержимое файла из fs.readFileSync() звонки, вы можете использовать brfs:

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

затем выполните:

browserify -t brfs main.js > bundle.js

и src будет установлено содержание file.txt во время компиляции.


Если вы хотите запустить файловую систему с browserify, вы можете установить npm.

npm install browserify-fs 

и вы можете получить доступ к объекту FS на стороне клиента.
Спасибо


для тех, кто на Google, у меня было гораздо больше удачи с преобразованием stringify.

https://github.com/JohnPostlethwait/stringify

ответы здесь были разочаровывающими (хотя и не нежелательными) я импортирую шаблоны в виде строк в свои компоненты, чтобы сэкономить на HTTP-запросах, купленных templateUrl и держите их вне файлов 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
    }
})

необходимо ли вам использовать require (fs) , вы всегда можете использовать html5 file reader 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.