浏览器内部的JS JS模块

我有一个场景,我想从客户端导出数据到CSV。 我将有一个文本框/区域或任何用户可以input数据,然后理想情况下只需点击一下,本地CSV文件将更新与该数据。

使用服务器交互的NodeJS及其核心模块(特别是fs模块)很容易实现,但显然不是来自浏览器。

我发现某些节点模块(例如underscore )支持RequireJS在浏览器中使特定模块工作的方法。 所以对于下划线我做了这个:

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> 

以上工作正常,并会显示提示:4。

但是,当我尝试与fs模块相同,它将无法正常工作。 它会显示这个错误:

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

据我所知,这是因为fs需要其他几个模块,其中一个是util

所以我开始将所有这些模块添加到RequireJSconfiguration。 但仍然没有运气,所以我专门testing了util模块,因为这似乎并不需要其他模块的工作。

而现在我卡在这个错误: Uncaught ReferenceError: exports is not defined

我试图通过封装整个模块源代码模块化这个使用模块:

 define([], function() {}) 

但它也没有工作…我也试图复制underscore的模型,但仍然没有运气。

所以我想知道是否有人设法在浏览器中使用utilfs模块(或任何其他核心NodeJS模块),例如RequireJS或Browserify等库。

这是正确的, exports是特定于节点的JS(用于使您的模块的一部分在模块外部可用),并且不受Web浏览器支持。 尽pipeNodeJS在技术上是JS,但客户端的特定属性(如浏览器的window属性,以及NodeJS应用程序的exports )不能互换。

这就是说, 这是一个客户端JS答案的CSV问题。

你最好的select(也许只有一个)是使用HTML5 FileSystem API 。 我不知道任何其他浏览器function,可以使用客户端计算机上的文件,除了Flash和类似的解决scheme。

我有点困惑你的browserify标签,因为你不明显使用Browserify。 这将解决您的问题“出口未定义”。