web-dev-qa-db-ja.com

Nodeブラウザ内のJSfsモジュール

クライアント側から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などのライブラリを使用してブラウザ内でutilfsモジュール(またはその他のコアNodeJSモジュール)を使用できる人はいないかと思いました。

12
magicode118

そうです、exportsはノード固有のJS(モジュールの一部をモジュールの外部で利用できるようにするために使用されます)であり、Webブラウザーではサポートされていません。 NodeJSは技術的にはJSですが、交換できないクライアント固有のプロパティ(ブラウザーの場合はwindowプロパティ、NodeJSアプリの場合はexportsなど)があります。

そうは言っても、 ここに クライアント側のJSがCSVの問題に答えます。

6
FloatingRock

あなたの最善の策(そしておそらく1つだけ)は HTML5 FileSystem API を使用することです。 Flashや同様のソリューションを除いて、クライアントコンピューター上のファイルを操作できる他のブラウザー機能を知りません。

あなたは明らかにBrowserifyを使用していないので、browserifyタグに少し混乱しています。これで、「エクスポートが定義されていません」という問題が修正されます。

1
FredyC