浏览器内部的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
的模型,但仍然没有运气。
所以我想知道是否有人设法在浏览器中使用util
& fs
模块(或任何其他核心NodeJS模块),例如RequireJS或Browserify等库。
这是正确的, exports
是特定于节点的JS(用于使您的模块的一部分在模块外部可用),并且不受Web浏览器支持。 尽pipeNodeJS在技术上是JS,但客户端的特定属性(如浏览器的window
属性,以及NodeJS应用程序的exports
)不能互换。
这就是说, 这是一个客户端JS答案的CSV问题。
你最好的select(也许只有一个)是使用HTML5 FileSystem API 。 我不知道任何其他浏览器function,可以使用客户端计算机上的文件,除了Flash和类似的解决scheme。
我有点困惑你的browserify标签,因为你不明显使用Browserify。 这将解决您的问题“出口未定义”。