Просмотр с помощью require('fs')

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

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

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

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


person Fred Finkle    schedule 19.05.2013    source источник


Ответы (5)


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

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

person Janus Troelsen    schedule 20.05.2013
comment
Я думаю, я ожидал бы, по крайней мере, что browserify оставит комментарий в браузерном коде, указывающий, что он не поддерживает модуль fs. - person Fred Finkle; 20.05.2013
comment
Вероятно, уровень абстракции здесь не подходит, но реализация FileReader и т. д. в node.js может быть (как часть браузера). В любом случае, я рад узнать, что отсутствующее преобразование является функцией, а не баг с моей стороны. - person Fred Finkle; 20.05.2013

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

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

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

browserify -t brfs main.js > bundle.js

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

person substack    schedule 05.06.2013
comment
Интересная идея, но не соответствует моим потребностям. - person Fred Finkle; 07.06.2013

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

npm install browserify-fs 

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

person Anish Agarwal    schedule 24.04.2014
comment
На самом деле я установил browserify-fs и потребовал его, но все равно получаю ту же ошибку, которая называется fs.readFileSync, это не функция. - person Preprocezzor; 11.05.2017

Если вам необходимо использовать require (fs) , вы всегда можете использовать API-интерфейс для чтения файлов html5 для чтения файлов в 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.

person Akash    schedule 03.10.2018

Для тех, кто в 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
    }
})
person Richard Vanbergen    schedule 13.08.2015