2016-10-30 10 views
1

私は現在webpackに切り替えようとしています。各モジュールで既知のファイルを変数webpackでロードする必要があります

node_modules 
    @my-namespace/moduleA 
    @my-namespace/moduleB 
    @my-namespace/moduleC 
    ... 

私は私のHTML構造は、現在のモジュールについての情報を持っています

ui/controllers 
     main.js 
     edit.js 

次のディレクトリがあるとします。 私は、プロジェクトのこれに似た構造を持っていますこの形式でロードする必要があるコントローラー

私の主なエントリーポイントには、私はそういうものがあります。私は私のコントローラにそれらを見つけるでしょうrequire('/ui/controllers/' + moduleName + '/' + controllerName)ように(私は検索したいすべてのモジュールを知っている)のすべてをプリロードするにはどうすればよい

const $ = require('jquery') 
const moduleName = $('html').data().module 
const controllerName = $('html').data().controller 

const controller = require('/ui/controllers/' + moduleName + '/' + controllerName) 

私はこれを独自のプラグインを使って作成することができ、すでにContextReplacementPluginを調べました。を組み合わせて使用​​すると、ContextElementDependencyが解決される可能性があります。しかし、ドキュメンテーションはそれに関する多くの情報を持っていません。私はすべての依存関係を追加できるように私は現在、

cmf.plugin('before-resolve', function(result, callback) { 
    if (result.request == 'ui/controller') { 
    // what do I need to do here so that 'after-resolve' is reached 

    return callback(null, result) 
    } else { 
    callback() 
    } 
}) 

に参加してこだわって

cmf.plugin('after-resolve', function(result, callback) { 
}) 

答えて

0

私は現在、前処理ステップでそれを解決しました。私は、Webパックと組み合わせて、一時的なビルドディレクトリにコピーし、次にそのような構造のローダーベースを作成する別のモジュールのすべてのファイルを検索します:

constroler- loader.jsその後

const Promise = require('bluebird') 

exports.get = function(controllerName, options) { 
    return new Promise((resolve, reject) => { 
    if (controllerName === 'moduleA/controllerA') { 
     require.ensure(['./moduleA/controllerA'], function(require) { 
     try { 
      const controller = require('./moduleA/controllerA'); 
      resolve(controller(options)); 
     } catch (e) { 
      reject(new Error('controller "' + controllerName + '" could not be created.')) 
     } 
     }); 
    } else if (controllerName === 'moduleA/controllerB') { 
     require.ensure(['./moduleA/controllerB'], function(require) { 
     try { 
      const controller = require('./controllers/events/overview'); 
      resolve(controller(options)); 
     } catch (e) { 
      reject(new Error('controller "' + controllerName + '" could not be created.')) 
     } 
     }); 
    } else { 
     reject(new Error('controller "' + controllerName + '" not found.')); 
    } 
    }) 
} 

私はビルドディレクトリ上のWebPACKを実行します。

関連する問題