2016-08-31 10 views
18

私はバンドルを作成するためにnode.jsとwebpackを使用しています。私が読んだことから、node.jsにはファイルを管理するためのモジュールfsが含まれているはずです。しかし、私がrequire("fs")と呼ぶとCannot find module "fs"というエラーが出ます。私は何をすべきか?webpackを使用している場合、ノードは「fs」モジュールを見つけることができません

+0

あなたが使用しているのNode.jsのバージョンは何?この質問にいくつかのソースコードを追加できましたか? – qzb

+0

バージョン6.5 ehm .. var fs = require( "fs"); これだけでエラーが発生します – user3799968

+0

万が一、ウェブパックを使用していますか? –

答えて

26

webpackとバンドルしたときにこの問題が発生しました。答えはthis threadです。あなたのノード・アプリケーション

編集をバンドルする必要な変更を行いますノードのWebPACKにターゲットを設定することで

module.exports = { 
    entry: "./app", 
    output: { 
    path: __dirname, 
    filename: "bundle.js" 
    }, 
    module: { 
     loaders: [ 
      { 
       test: /\.js$/, 
       exclude: 'node_modules', 
       loader: 'babel', 
       query: {presets: ['es2015']}, 
      } 
     ] 
    }, 
    target: 'node' 
}; 

私のためにそれを解決する方法は、次の設定を使用していたこの答えは、対象現在置き換えられているwebpack 1.x。

+1

それは修正しましたが、エラーを見つけることができませんでした。コンソールのロギングは私に期待される出力を与えません。私はfsの関数を使うことはできません。 – user3799968

+0

ごめんなさい申し訳ありません私は私の前でコードを使用していませんでした。私は答えを更新し、それが正常に動作するテストしました。 'target: 'node'を追加すると、Webpackはfsモジュールをバンドルしなくなり、通常の使用が可能になります。 –

+14

私はその後、必要と定義されていません – user3799968

4

ウェブワーカー(ノードが有効になっていた)を使用してNWjsアプリケーションをNWjsアプリケーションにバンドルすると、同じ問題が発生しました。

私が見つけた解決策は、私がexternalsで使用した各ネイティブモジュールを、接頭辞commonjsをモジュールの名前に含めることでした。たとえば:

... 
    target: "webworker", // or 'node' or 'node-webkit' 
    externals:{ 
     fs: "commonjs fs", 
     path: "commonjs path" 
    } 
    ... 

私は同じ問題を解決するために、さまざまなプロジェクトにターゲットを「webworker」と「ノードのWebKit」のために同じことをやりました。

+0

クイック解説@PDG、これはwebpack 3のためだけですか?あなたの答えは私のNW.jsアプリの問題を克服するのに役立ちました。ありがとうございました!私は利用可能なfsが必要なので、私はwebpackの設定で 'node-webkit'をターゲットとして使用しなければなりませんでした。私は[email protected]をインストールした後でしか動作しないと思います。これが事実であることを確認できますか? – ackzell

+0

それがあなたを助けてくれてうれしいです。私はwebpack 2+でも動作することを確認することができます。私は今この方法でプロジェクトで使用しています。 – PDG

関連する問題