クライアント側からCSVにデータをエクスポートしたいというシナリオがあります。テキストボックス/エリアなど、ユーザーがデータを入力できる場所があります。理想的には、ワンクリックでローカル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
が他のいくつかのモジュールを必要とするためです。そのうちの1つはutil
です。
そこで、これらすべてのモジュールをRequireJS構成に追加しました。しかし、それでも運がないので、util
モジュールを単独でテストしました。これは、他のモジュールが機能する必要がないように思われるためです。
そして今、私はこのエラーで立ち往生しています:Uncaught ReferenceError: exports is not defined
モジュールのソースコード全体を次のようにカプセル化して、このutil
モジュールをモジュール化してみました。
define([], function() {})
しかし、それも機能しませんでした...私もunderscore
のモデルをコピーしようとしましたが、それでもうまくいきませんでした。
そのため、RequireJSやBrowserifyなどのライブラリを使用してブラウザ内でutil
&fs
モジュール(またはその他のコアNodeJSモジュール)を使用できる人はいないかと思いました。
そうです、exports
はノード固有のJS(モジュールの一部をモジュールの外部で利用できるようにするために使用されます)であり、Webブラウザーではサポートされていません。 NodeJSは技術的にはJSですが、交換できないクライアント固有のプロパティ(ブラウザーの場合はwindow
プロパティ、NodeJSアプリの場合はexports
など)があります。
そうは言っても、 ここに クライアント側のJSがCSVの問題に答えます。
あなたの最善の策(そしておそらく1つだけ)は HTML5 FileSystem API を使用することです。 Flashや同様のソリューションを除いて、クライアントコンピューター上のファイルを操作できる他のブラウザー機能を知りません。
あなたは明らかにBrowserifyを使用していないので、browserifyタグに少し混乱しています。これで、「エクスポートが定義されていません」という問題が修正されます。