2017-03-14 7 views
1

OK、私は高低を検索しましたが、これがウェブパックで可能かどうかを確実に判断できません。 webpackダイナミックモジュールローダーby要求

https://github.com/webpack/webpack/tree/master/examples/require.context

は、1つの関数に文字列を渡すことができ、それがモジュールをロードすることを...

を示すために表示されますが、私の試みは、単に動作していない: webpack.config.js

'use strict'; 
let webpack  = require('webpack'), 
    jsonLoader = require("json-loader"), 
    path  = require("path"), 
    fs   = require('fs'), 
    nodeModules = {}; 

fs.readdirSync('node_modules') 
    .filter(function(x) { 
     return ['.bin'].indexOf(x) === -1; 
    }) 
    .forEach(function(mod) { 
     nodeModules[mod] = 'commonjs ' + mod; 
    }); 


let PATHS = { 
    app: __dirname + '/src' 
}; 

module.exports = { 
    context: PATHS.app, 
    entry: { 
     app: PATHS.app+'/server.js' 
    }, 
    target: 'node', 
    output: { 
     path: PATHS.app, 
     filename: '../build/server.js' 
    }, 
    externals: nodeModules, 
    performance: { 
     hints: "warning" 
    }, 
    plugins: [ 
     jsonLoader 
    ], 
    resolve: { 
     modules: [ 
      './node_modules', 
      path.resolve(__dirname), 
      path.resolve(__dirname + "/src"), 
      path.resolve('./config') 
     ] 
    }, 
    node: { 
     fs: "empty" 
    } 
}; 

server.js

let _ = require('lodash'); 
let modules = [ "modules/test" ]; 

require('modules/test')(); 

_.map(modules, function(module){ 
    require(module); 
}); 

モジュール内のモジュール/名前のtest.js

module.exports =() => { 
    console.log('hello world'); 
}; 

しかし、結果は静的が必要とのhello ... PM2ログはちょうど言う常に世界と同じである...しかし、同じモジュールを動的にロードするための

Error: Cannot find module "."

すべて私がしたいですできるだけ多くのパスをモジュールにロードしてロードします。

答えて

8

requireの引数として変数を使用することはできません。 Webpackはコンパイル時にバンドルするファイルを知る必要があります。プログラムフロー分析は行われないので、関数に渡すものを知ることはできません。その場合は明らかかもしれませんが、これはユーザー入力を使用して必要なモジュールを決定することにまで及ぶ可能性があり、webpackはコンパイル時にどのモジュールをインクルードするかを知ることができないため、webpackは許可しません。

投稿した例は少し異なります。連結された文字列にrequireを使用できます。例:

require(`./src/${moduleName}/test`); 

バンドルにどのモジュールを含める必要がありますか?変数moduleNameは何でもかまいませんので、コンパイル時に正確なモジュールはわかりません。代わりに、すべてのモジュールが上記の式と一致する可能性があります。次のディレクトリ構造を仮定:moduleNameoneまたはtwo/subdirのようなネストされたものになる可能性があるため、

src 
├─ one 
│   └─ test.js 
├─ two 
│   ├─ subdir 
│   │   └─ test.js 
│   └─ test.js 
└─ three 
    └─ test.js 

これらtest.jsファイルはすべて、バンドルに含まれます。

詳細については、require with expressionの公式ドキュメントを参照してください。

上記の例外を除いて、配列をループして配列のすべてのモジュールをインポートすることはできませんが、すべてのモジュールを含めるという効果があり、一般的には避けるべきです。

+1

Webpackのドキュメントでこれが明確に説明されている場合のみです。 –

+0

ありがとう、ありがとう、私はあなたにそれをクリアして、そして根本的な原因の特に詳細な説明をありがとう。一般的な方法で表示するために私のファイルをどのようにロードするべきかについての提案はありますか?私はReactプログラミングとあらゆる深刻なプログラミングにはまったく新しいので、どんな種類のデザインパターンが適しているかという大まかなアイデアは素晴らしいと思いますので、私はそれらをさらに研究することができました。ありがとうございました。 – MoSheikh

関連する問題