Próbuję skonfigurować przepływ oparty na pakiecie Webpack dla aplikacji Angular2 z serwerem zaplecza węzła. Po wielu godzinach walenia głową w nie, udało mi się przekonać klienta, żeby zbudował się szczęśliwie, ale nie wiem, jak teraz zintegrować moją kompilację serwera. Mój serwer używa generatorów, więc musi być kierowany na ES6 i musi wskazywać na inny plik typowania (main.d.ts zamiast browser.dts).Webpack z konfiguracją węzła klient/serwer?
Moje drzewo źródłowe wygląda;
/
-- client/
-- -- <all my angular2 bits> (*.ts)
-- server/
-- -- <all my node/express bits> (*.ts)
-- webpack.config.js
-- typings/
-- -- browser.d.ts
-- -- main.d.ts
Pomyślałem, że może tylko tsconfig.json w folderze klienta i serwera będzie działać, ale nie ma szczęścia. Nie mogę też znaleźć sposobu na pobranie html-webpack-plugin, aby zignorować mój pakiet serwera, a nie wstrzyknąć go do pliku index.html. Mój obecny tsconfig i webpack znajdują się poniżej, ale czy komuś udało się zdobyć pakiet sieciowy, aby spakować taką konfigurację? Wszelkie wskazówki będą mile widziane.
{
"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"
]
}
i mój 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')
]
};
Dzięki! Myślę, że to może być faktycznie wykonalne, jedynym pytaniem jest ... jak mogę uruchomić Webpack, aby uruchomić (nodemon) po stronie serwera, i ponownie uruchomić go po zmianie przy użyciu Webpack - watch? – XeroxDucati
Nie jestem pewien, czy rozumiem problem. Jeśli używasz nodemon, po prostu uruchom go w głównym pliku wyjściowym, np. 'nodemon./build/server.js'. Powinien ponownie uruchomić się po każdej zmianie pliku na pliki ouput po stronie serwera. A jeśli użyjesz 'webpack ... --watch', pliki wyjściowe ulegną zmianie po zmianie plików wejściowych. Innymi słowy, pakiet webowy nie będzie odpowiedzialny za ponowne uruchomienie serwera; nodemon będzie. Czy to nie działa? – McMath
Właśnie o czymś pomyślałem. Czy zastanawiałeś się, czy potrzebujesz pakietu WebPack dla swojej kompilacji po stronie serwera? Po prostu pomyślałem, że może być łatwiej użyć czegoś takiego jak 'tsc -p ./server -w', gdzie'./ server' zawiera kod po stronie serwera i jego plik 'tsconfig.json'. – McMath