2016-03-08 1 views
6

Ich schaute auf ähnlich, konnte aber keine konkrete Antwort finden, die mein Problem löste. Ich kann die Datei bundle.js nicht finden, obwohl ich festlege, wo sie ausgegeben werden soll und alles im Browser funktioniert. Ich verstehe, dass der Webpack-dev-Server die Dateien aus dem Speicher lädt und nichts auf die Festplatte geschrieben wird, wie kann ich die Datei erstellen und zum Verzeichnis hinzufügen, das in der Ausgabe-Eigenschaft in der Konfigurationsdatei angegeben ist?bundle.js fehlt in webpack build bei der Verwendung von webpack-dev-server

Hier ist meine package.json:

{ 
    "name": "redux-simple-starter", 
    "version": "1.0.0", 
    "description": "Simple starter package for Redux with React and Babel support", 
    "main": "index.js", 
    "repository": "[email protected]:StephenGrider/ReduxSimpleStarter.git", 
    "scripts": { 
    "start": "./node_modules/webpack-dev-server/bin/webpack-dev-server.js -- content-base build" 
     }, 
     "author": "", 
     "license": "ISC", 
     "devDependencies": { 
     "babel-core": "^6.2.1", 
     "babel-loader": "^6.2.0", 
     "babel-preset-es2015": "^6.1.18", 
     "babel-preset-react": "^6.1.18", 
     "react-hot-loader": "^1.3.0", 
    "webpack": "^1.12.9", 
    "webpack-dev-server": "^1.14.0" 
    }, 
    "dependencies": { 
    "babel-preset-stage-1": "^6.1.18", 
    "react": "^0.14.3", 
    "react-dom": "^0.14.3", 
    "react-redux": "^4.0.0", 
    "redux": "^3.0.4" 
    } 
    } 

webpack config:

var path = require('path'); 
    var webpack = require('webpack'); 

    module.exports = { 
    entry: [ 
     'webpack-dev-server/client?http://localhost:8080', 
     'webpack/hot/only-dev-server', 
     './src/index.js' 
    ], 
    output: { 
     path: path.join(__dirname, 'assets'), 
     publicPath: '/', 
     filename: 'bundle.js' 
    }, 
    module: { 
     loaders: [{ 
     exclude: /node_modules/, 
     loader: 'babel' 
     }] 
    }, 
    resolve: { 
     extensions: ['', '.js', '.jsx'] 
    }, 
    devServer: { 
     contentBase: './' 
    }, 

    plugins: [ 
     new webpack.HotModuleReplacementPlugin() 
    ] 
    };  
+2

Ich glaube, ich vorher gesehen habe - Ich glaube nicht, dass bei der Ausführung von 'webpak-dev-server 'bundle.js tatsächlich erstellt wird, sondern nur im Speicher abgelegt wird. Ich vermute, wenn Sie den einfachen vanilla webpack-Befehl ausführen, der nur das Projekt erstellt, werden Sie Ihre 'bundle.js' in Ihrem' Assets'-Verzeichnis sehen. Versuchen Sie erneut, nur 'webpack' von Ihrem Terminal auszuführen. – lux

+1

@lux spot auf! Du hättest das als Antwort geben sollen! – Abdi

Antwort

4

Dieses Webpack plugin zwingt den Server, das Bundle auf die Festplatte zu schreiben.

Obwohl ich mit Austin und lux einverstanden bin, rufen Sie webpack direkt auf, wenn Sie die Datei auf der Festplatte haben müssen.

5

Wenn die dev-Server verwenden, wird der Ausgang auf sie gesetzt wird. Sie werden es also nicht wirklich in Ihren Dateien sehen. Von Ihrer index.html Datei wollen Sie sie vom Server laden.

Zum Beispiel, für meine App lade ich in Dev-Server, meine Hersteller-Dateien, und dann meinen eigenen Code.

<script src="http://localhost:8080/webpack-dev-server.js"></script> 
<script src="http://localhost:8080/build/vendor.js"></script> 
<script src="http://localhost:8080/build/app.js"></script> 

Und hier ist der relevante Teil meiner Webpack-Konfiguration. Es gibt einige unnötige Legacy-Bits von, als ich es auch aus einem statischen Build-Bundle geladen habe.

app: [ 
     'webpack/hot/dev-server', 
     'webpack-dev-server/client?http://localhost:8080', 
     './client/index.js' 
     ] 

}, 
output: { 
    path: __dirname + '/client/build', 
    publicPath: '/build/', 
    filename: '[name].js', 
    pathinfo: true 
}, 
+0

Ich weiß, dass es vom Webpack-Server geladen wird, aber ich möchte die tatsächliche Datei in meinem Verzeichnis, so dass ich es in einer anderen Umgebung verwenden kann, wenn dies sinnvoll ist. – Abdi

+0

Das klingt eher nach einem Designproblem als nach einem Webpack-Problem. Ich würde überdenken, was Sie in diesem Fall versuchen, wenn Sie nicht einfach den Build vom Server verweisen können. –

+0

@AustinShoecraft nur vorstellen, dev and product enviroment. In prod solltest du nur Inline-JS-Dateien einfügen, aber in Dev kannst du das Warm-Nachladen machen. Wenn Sie html vom Server bereitstellen, können Sie den webpack dev Server nicht verwenden, da er die Dateien auf der Festplatte nicht ändert. –

0

Sie können Webpack auch mit einem Flag in der Konfiguration überwachen. Dadurch wird die Bundle-Datei

module.exports = { 
    watch: true, 
}; 
0

Ersetzen Sie Ihre Skripte Aufgabe package.json Datei mit dem man folgende erzeugen:

"scripts": { 
    "start": "npm run build", 
    "build": "webpack -p && ./node_modules/webpack-dev-server/bin/webpack-dev-server.js -- content-base build" 
}, 

Dann $ npm start laufen