Ich versuche, einen Webpack-basierten Fluss für eine Angular2-App mit einem Knoten-Backend-Server einzurichten. Nach vielen Stunden, die mir den Kopf dagegen schlagen, habe ich es geschafft, den Kunden glücklich zu machen, aber ich kann nicht herausfinden, wie ich meinen Server Build jetzt integrieren soll. Mein Server verwendet Generatoren, muss also auf ES6 zielen und muss auf eine andere Typisierungsdatei zeigen (main.d.ts anstelle von browser.d.ts).Webpack mit einem Client/Server-Knoten Setup?
Mein Quellbaum sieht so aus;
Ich dachte vielleicht nur eine tsconfig.json in den Client- und Server-Ordnern würde funktionieren, aber kein Glück dort. Ich kann auch keinen Weg finden, das HTML-Webpack-Plugin dazu zu bringen, mein Serverpaket zu ignorieren und es nicht in index.html zu injizieren. Mein aktuelles tsconfig und Webpack sind unten, aber ist es irgendjemandem gelungen, Webpack ein solches Setup zu bündeln? Alle Hinweise würden sehr geschätzt werden.
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"moduleResolution": "node",
"sourceMap": true,
"declaration": false,
"removeComments": true,
"noEmitHelpers": false,
"emitDecoratorMetadata": true,
"experimentalDecorators": true
},
"files": [
"typings/browser.d.ts",
"client/app.ts",
"client/bootstrap.ts",
"client/polyfills.ts"
]
}
und meine webpack.config.js;
var Webpack = require('webpack');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var Path = require('path');
module.exports = {
entry: {
'polyfills': Path.join(__dirname, 'client', 'polyfills.ts'),
'client': Path.join(__dirname, 'client', 'bootstrap.ts')
},
output: {
path: Path.join(__dirname, 'dist'),
filename: '[name].bundle.js'
},
resolve: {
extensions: ['', '.js', '.json', '.ts']
},
module: {
loaders: [
{
test: /\.ts$/,
loader: 'ts-loader',
query: {
ignoreDiagnostics: [
2403, // 2403 -> Subsequent variable declarations
2300, // 2300 -> Duplicate identifier
2374, // 2374 -> Duplicate number index signature
2375, // 2375 -> Duplicate string index signature
]
}
},
{ test: /\.json$/, loader: 'raw' },
{ test: /\.html$/, loader: 'raw' },
{ test: /\.css$/, loader: 'raw!postcss' },
{ test: /\.less$/, loSWE: 'raw!postcss!less' }
]
},
plugins: [
new HtmlWebpackPlugin({ template: 'client/index.html', filename: 'index.html' }),
new Webpack.optimize.CommonsChunkPlugin('common', 'common.bundle.js')
]
};
Danke! Ich denke, das könnte tatsächlich praktikabel sein, die einzige Frage ist ... Wie bekomme ich Webpack, um die Serverseite zu starten (nodemon), und sie bei Änderung mit webpack --watch neu zu starten? – XeroxDucati
Ich bin mir nicht sicher, ob ich das Problem verstehe. Wenn Sie nodemon verwenden, starten Sie es einfach in der Hauptausgabedatei, z. 'nodemon./build/server.js'. Es sollte bei jeder Dateiänderung zu den serverseitigen Ausgabedateien neu gestartet werden. Und wenn Sie 'webpack ... --watch' verwenden, ändern sich die Ausgabedateien, wenn sich die Eingabedateien ändern. Mit anderen Worten, Webpack ist nicht verantwortlich für den Neustart Ihres Servers; knotemon wird. Funktioniert das nicht? – McMath
Ich habe gerade an etwas gedacht. Haben Sie überlegt, ob Sie ein Webpack für Ihren serverseitigen Build benötigen? Ich dachte nur, es könnte einfacher sein, etwas wie 'tsc -p ./server -w' zu verwenden, wo './ server' enthält den serverseitigen Code und seine Datei 'tsconfig.json'. – McMath