2016-03-11 12 views
7

Ho una configurazione Webpack per un server nodo che esegue Express. Il file di immissione, se in produzione, esegue il server Express, se in fase di sviluppo esegue anche Express Server e Webpack Dev Server. Il problema si trova quando il server dev di webpack viene inizializzato; si lamenta di Unhandled rejection Error: invalid argument o di percorsi non trovati. La configurazione client utilizzata nel server dev di Webpack funziona correttamente se utilizzata dalla propria CLI, inoltre funziona quando il webpackdevserver viene inizializzato in un file regolare (non in bundle).Esecuzione di un server Dev di Webpack all'interno di un pacchetto Webpack

La differenza rispetto a ciascun metodo è che i percorsi stampati dalla configurazione sono diversi tra i casi che funzionano e quelli che non lo fanno. Questi percorsi sono risolti dal __dirname che è diverso in ogni caso. Perché il motivo potrebbe essere questo ed è possibile ottenere il normale percorso __dirname?

Grazie in anticipo.

Server Config:

{ 
    target: 'node', 
    entry: rootDirectory, 
    externals: nodeModules,//readDirSync('node_modules').filter(x => x !== '.bin'), 
    output: { 
    path: join(rootDirectory, 'build'), 
    filename: 'index.js' 
    }, 
    module: { 
    loaders: [ 
     { 
     test: /\.js$/, 
     exclude: /node_modules/, 
     loader: 'babel' 
     } 
    ] 
    }, 
    plugins: [ 
    new DefinePlugin({ 
     'process.env': { 
     'NODE_ENV': JSON.stringify('development'), 
     'PORT': 8080, 
     'SERVER': true, 
     'CLIENT': false 
     } 
    }) 
    ], 
    node: { 
    __dirname: false, 
    __filename: false 
    } 
}; 

configurazione client:

{ 
    entry: { 
    client: [ 
     'webpack-dev-server/client?http://localhost:8080', 
     'webpack/hot/only-dev-server', 
     './client' 
    ] 
    }, 
    output: { 
    path: join(rootDirectory, 'public'), 
    filename: 'bundle.js', 
    publicPath: '' 
    }, 
    module: { 
    loaders: [ 
     { 
     test: /\.js$/, 
     exclude: /node_modules/, 
     loader: 'babel' 
     } 
    ] 
    }, 
    plugins: [ 
    // new DefinePlugin({ 
    // 'process.env': { 
    //  'NODE_ENV': JSON.stringify('development'), 
    //  'PORT': 8080, 
    //  'SERVER': false, 
    //  'CLIENT': true 
    // } 
    // }), 
    new HTMLWebpackPlugin({ 
     template: './index.tmp.html', 
     filename: 'index.html', 
     chunks: ['client'] 
    }), 
    new webpack.HotModuleReplacementPlugin() 
    ] 
} 

index.js

import devServer from './devServer'; 
import server from './server'; 

const PORT = process.env.PORT || 8080; 

switch (process.env.NODE_ENV || 'development') { 
    case 'development': devServer(PORT); 
    case 'production': server(PORT - 1); 
} 

devServer.js

// import Express from 'express'; 
import webpack from 'webpack'; 
import WebpackDevServer from 'webpack-dev-server'; 
// import webpackDevMiddleware from 'webpack-dev-middleware'; 
// import webpackHotMiddleware from 'webpack-hot-middleware'; 

import {join} from 'path'; 

import config from './webpack/dev/client.config'; 

export default (PORT) => { 
    // let app = new Express(); 
    let compiler = webpack(config); 
    let serverOptions = { 
    inline: true, 
    hot: true, 
    contentBase: '/public', 
    publicPath: config.output.publicPath, 
    proxy: { 
     '*': `http://localhost:${PORT - 1}` 
    } 
    } 
    let app = new WebpackDevServer(compiler, serverOptions); 
    app.listen(PORT); 
} 

Client.js

console.log('hello world'); 

struttura del codice

./index.js 
./server.js 
./devServer.js 
./client.js 
./webpack/dev/server.config.js 
./webpack/dev/client.js 
./public 
./build 

stack errori

Unhandled rejection Error: invalid argument 
    at pathToArray (/Users/AJ/Desktop/winebox/node_modules/memory-fs/lib/MemoryFileSystem.js:44:10) 
    at MemoryFileSystem.mkdirpSync (/Users/AJ/Desktop/winebox/node_modules/memory-fs/lib/MemoryFileSystem.js:139:13) 
    at MemoryFileSystem.(anonymous function) [as mkdirp] (/Users/AJ/Desktop/winebox/node_modules/memory-fs/lib/MemoryFileSystem.js:279:34) 
    at Compiler.<anonymous> (/Users/AJ/Desktop/winebox/node_modules/webpack/lib/Compiler.js:229:25) 
    at Compiler.next (/Users/AJ/Desktop/winebox/node_modules/tapable/lib/Tapable.js:67:11) 
    at /Users/AJ/Desktop/winebox/node_modules/html-webpack-plugin/index.js:163:9 
    at PassThroughHandlerContext.finallyHandler (/Users/AJ/Desktop/winebox/node_modules/bluebird/js/release/finally.js:55:23) 
    at PassThroughHandlerContext.tryCatcher (/Users/AJ/Desktop/winebox/node_modules/bluebird/js/release/util.js:16:23) 
    at Promise._settlePromiseFromHandler (/Users/AJ/Desktop/winebox/node_modules/bluebird/js/release/promise.js:503:31) 
    at Promise._settlePromise (/Users/AJ/Desktop/winebox/node_modules/bluebird/js/release/promise.js:560:18) 
    at Promise._settlePromise0 (/Users/AJ/Desktop/winebox/node_modules/bluebird/js/release/promise.js:605:10) 
    at Promise._settlePromises (/Users/AJ/Desktop/winebox/node_modules/bluebird/js/release/promise.js:684:18) 
    at Async._drainQueue (/Users/AJ/Desktop/winebox/node_modules/bluebird/js/release/async.js:126:16) 
    at Async._drainQueues (/Users/AJ/Desktop/winebox/node_modules/bluebird/js/release/async.js:136:10) 
    at Immediate.Async.drainQueues [as _onImmediate] (/Users/AJ/Desktop/winebox/node_modules/bluebird/js/release/async.js:16:14) 
    at processImmediate [as _immediateCallback] (timers.js:383:17) 
+0

Potresti fornire un collegamento al tuo file 'webpack.config.js'? –

+0

Ok, ho incluso i file di configurazione e parte della struttura del codice. E lo stack di errori che ottengo. –

+0

Ho lo stesso problema. Nessun aggiornamento? –

risposta

9

output.path in webpack.config.js dovrebbero essere percorso assoluto cioè /home/user/../
Questo bug fisso per me.

+0

Avrei letteralmente i tuoi figli figurativi per questa risposta ... –

Problemi correlati