gulp - Αλλαγές που σπάνε στη TypeScript 2.1.4 στο webpack ts-loader
Η αναβάθμιση από Typescript 2.0.10 σε 2.1.4 φαίνεται να σπάει κάτι στο webpack, webpack-stream, ts-loader ή gulp καθώς δεν σέβεται πλέον το entry point μου ή τη συλλογή πηγών του gulp. Φαίνεται να περιλαμβάνονται όλα τα αρχεία .ts στο έργο μου (συμπεριλαμβανομένων αυτών στον φάκελο /server) αντί μόνο των αρχείων ts στο /client και του app.ts όπως ορίζεται στο gulp.src και στο webpack entry point. Υπάρχει κάποιος διαφορετικός/νέος/καλύτερος τρόπος που θα έπρεπε να το κάνω;
στο αρχείο gulp:
const serverPath = 'server';
const clientPath = 'client';
const buildPath = 'build';
const paths = {
server: {
scripts: [
`${serverPath}/**/*.ts`
]
},
client: {
files: [
`${clientPath}/**/*`
],
scripts: [
`${clientPath}/**/*.ts`
],
entry: `${clientPath}/app.ts`
}
};
gulp.task('build:client', cb => {
gulp.src(paths.client.entry)
.pipe(webpackStream(webpackConfig, webpack))
.pipe(gulp.dest(`${buildPath}/${clientPath}`));
cb();
});
στη ρύθμιση του Webpack:
entry: {
app: './client/app.ts'
}
ts: {
configFileName: './tsconfig.json'
}
resolve: {
extensions: ['', '.webpack.js', '.web.js', '.ts', '.tsx', '.js']
}
module: {
loaders: [
{ test: /\.ts$/, loader: 'ng-annotate-loader!ts-loader' }
]
}
στο tsconfig.json:
{
"compilerOptions": {
"module": "commonjs",
"target": "es6",
"removeComments": false,
"noImplicitAny": true,
"sourceMap": true,
"inlineSources": true,
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
Έξοδος χρησιμοποιώντας 2.0.10:
ts-loader: Using [email and /Users/chris/code/class-app/tsconfig.json
[20:47:36] Version: webpack 1.14.0
Asset Size Chunks Chunk Names
app.js.map 950 bytes 0 [emitted] app
app.js 550 bytes 0 [emitted] app
Έξοδος χρησιμοποιώντας 2.1.4:
ts-loader: Using [email and /Users/chris/code/class-app/tsconfig.json
server/api/thing/thing.controller.ts(17,16): error TS2322: <ts error in server portion, not relevant>
[20:53:03] TypeScript: 1 semantic error
[20:53:03] TypeScript: emit succeeded (with errors)
Unhandled rejection Error in plugin 'webpack-stream'
Message:
/Users/chris/code/class-app/server/api/thing/thing.controller.ts <same as above>
Απάντηση #1
Προφανώς, το πρόβλημα είναι ότι το TypeScript στο WebPack εκτελούνταν στον κώδικα του διακομιστή όλη αυτή την ώρα (αν και δεν θα έπρεπε) και αν και είχα σχεδιάσει να διορθώσω το πρόβλημα TS του διακομιστή που εισήγαγε η αναβάθμιση του TypeScript, αυτό που πραγματικά αποκάλυψε ήταν ότι το WebPack συνέτασσε αρχεία που δεν θα έπρεπε εδώ και καιρό. Το δοκίμασα αυτό εισάγοντας εκ προθέσεως ένα πρόβλημα στο ts του διακομιστή στην προηγούμενη («λειτουργική») έκδοση του TypeScript, παίρνοντας το ίδιο σφάλμα.
Χρειάζεται ακόμα να καταλάβω γιατί προσπαθεί να μεταγλωττίσει όλα τα αρχεία TS μου, και όχι μόνο αυτά στον /client, αλλά θα κάνω μια νέα ερώτηση γι' αυτό.