Módulo Node JS fs dentro del browser

Tengo un escenario en el que quiero exportar datos a CSV desde el lado del cliente. Tendré un textbox / área o lo que sea donde el usuario puede ingresar datos y luego, idealmente, con un solo clic, se actualizará un file CSV local con esos datos.

Esto se puede lograr fácilmente con NodeJS con interacción del server y sus modules principales (específicamente el module fs ), pero aparentemente no tanto desde un browser.

Descubrí que ciertos modules de nodo (por ejemplo, underscore ), admiten el método de RequireJS para hacer que un module en particular funcione en el browser. Entonces, para guión bajo hice esto:

methods.js

 define(['underscore'],function(_) { var Methods = { doSomething: function() { var x = _.size({one: 1, two: 2, three: 3, xuz: 3}); alert(x); } }; return Methods; }); 

common.js

 requirejs.config({ baseURL: 'node_modules', paths: { underscore: 'underscore/underscore', } }); require(['methods'], function(y){ y.doSomething(); }); 

index.html

 <script data-main="common" src="require.js"></script> <script> require(['common'], function() { require(['methods.js']); }); </script> 

Lo anterior funciona bien y mostrará una alerta: 4.

Pero cuando bash lo mismo con el module fs , no funcionará. Mostrará este error:

 Module name "util" has not been loaded yet for context: _. Use require([]) 

Por lo que puedo entender, esto se debe a que fs requiere varios otros modules, uno de ellos es util .

Así que procedí a agregar todos estos modules a la configuration RequireJS. Pero todavía no tuve suerte, así que específicamente probé el module util por sí mismo, ya que no parece requerir que otros modules funcionen.

Y ahora estoy atascado en este error: Uncaught ReferenceError: exports is not defined

Intenté modularizar este module util encapsulando todo el código fuente del module en esto:

 define([], function() {}) 

Pero tampoco funcionó … También intenté copyr el model de underscore , pero todavía no tuve suerte.

Así que me preguntaba si alguien logró usar los modules de utilidades y fs (o cualquier otro module NodeJS central) dentro del browser con bibliotecas como RequireJS o Browserify.

Así es, las exports son JS específicas del nodo (que se utilizan para hacer que una parte de su module esté disponible fuera del module) y no son compatibles con los browseres web. Aunque NodeJS es técnicamente JS, existen properties específicas del cliente (como la propiedad de window para browseres y exports para aplicaciones NodeJS) que no se pueden intercambiar.

Dicho esto, aquí hay una respuesta JS del lado del cliente al problema CSV.

Su mejor opción (y probablemente solo una) es utilizar HTML5 FileSystem API . No conozco ninguna otra característica del browser que permita trabajar con files en la computadora del cliente, excepto tal vez Flash y una solución similar.

Estoy un poco confundido por su label browserify ya que obviamente no está usando Browserify. Eso solucionaría su problema con "exportaciones no definidas".