2016-08-01 11 views
1

Ich habe einen Ausdruck erfordern, die in Laufzeit gelöst bekommen soll, aber ich kann meinen Kopf um die webpack Config für dieses einfache Beispiel nicht erhalten:Webpack erfordert Ausdruck externer

import something from 'module'; 
import pkg from './package.json'; 
let a; 

if (pkg.main) { 
    a = require(pkg.main); 
} 

Der resultierende Build sollte die module enthält aber benötigen auch und pkg.main in Runtime als commonjs Module - mit anderen Worten, sie aus dem Build auszuschließen.

Mein webpack.config.js bisher:

var webpack = require('webpack'); 

module.exports = { 
    entry: './src/main.js', 
    output: { 
    filename: '[name].js', 
    path: './build' 
    }, 
    target: 'node-webkit', 
    plugins: [ 
    new webpack.ExternalsPlugin('commonjs', './package.json') 
    ], 
    module: { 
    noParse: /\.min\.js/, 
    exprContextRegExp: /$^/, 
    exprContextCritical: false, 
    loaders: [ 
     { 
     test: /\.js$/, 
     loader: 'babel', 
     exclude: /node_modules/ 
     } 
    ] 
    } 
}; 

Was passiert jetzt die für pkg.main Ergebnisse in webpackMissingModule Ausnahme erfordern und wenn ich exprContextRegExp entfernen, benötigen der Kontext verwenden.

Vielen Dank für jede Hilfe

Antwort

1

Für alle fragen:

wie kann nicht durch webpack gelöst werden überlassen bleiben
function() { 
    this.parser.plugin('call require', function(expr) { 
    if (expr.arguments.length !== 1) { 
     return; 
    } 

    const param = this.evaluateExpression(expr.arguments[0]); 
    if (!param.isString() && !param.isConditional()) { 
     return true; 
    } 
    }); 
} 

Alles, was: Sie können es mit diesem Plugin lösen können.

Verwandte Themen