Tôi đang cố gắng biên dịch gulp và xem các tệp TypeScript. Đây là những gì tôi đã có cho đến nayGulpfile có hiệu quả biên dịch chỉ thay đổi các tệp TypeScript
var tsProject = plugins.typescript.createProject(
{
removeComments: false,
target: 'ES5',
module: 'amd',
noExternalResolve: false,
noImplicitAny: false,
});
var typescriptGlob = [
presentationScriptsDir + '**/*.ts',
definitelyTypedDefinitions
];
gulp.task("compile-typescript", function() {
return gulp.src(typescriptGlob)
.pipe(plugins.typescript(tsProject))
.pipe(gulp.dest(presentationScriptsDir));
});
gulp.task("watch-typescript", function() {
return gulp.watch(typescriptGlob, ["compile-typescript"]);
});
Tôi đang sử dụng gulp-typescript.
Tuy nhiên, vì chúng ta có hàng trăm file nguyên cảo Tôi không muốn biên dịch lại tất cả các file mỗi khi một trong số họ thay đổi. Đoạn mã trên làm thế (tôi có thể nói vì watch-typescript
mất ít nhất nhiều thời gian như các compile-typescript
)
Tôi đã cố gắng sử dụng gulp-changed, như thế này
gulp.task("compile-typescript", function() {
return gulp.src(typescriptGlob)
.pipe(plugins.changed(presentationScriptsDir, {extension: '.js'}))
.pipe(plugins.typescript(tsProject))
.pipe(gulp.dest(presentationScriptsDir));
});
Đó thực sự lọc ra các file không thay đổi. Nhưng sau đó trình biên dịch bản ghi báo cáo lỗi vì nó chỉ nhận được một tệp duy nhất, mà thiếu các khai báo kiểu mà nó thường nhận được từ các tệp khác.
Tôi không muốn đặt cờ noExternalResolve
thành true, vì sau đó rất nhiều loại kiểm tra sẽ không được thực hiện, điều này sẽ đánh bại rất nhiều lý do sử dụng TypeScript ở vị trí đầu tiên.
Làm thế nào tôi có thể viết gulpfile này tốt hơn?
@ mike-shenk Chúng tôi cũng đã định cấu hình trình chỉnh sửa của mình để sử dụng cờ noResolve để biên dịch nhanh. Tuy nhiên, chúng tôi đang sử dụng mô-đun amd và cách tiếp cận này bị hỏng trong một trường hợp. Nếu chúng tôi nhập tệp và chỉ sử dụng nhập đó để mở rộng một lớp, tệp đó sẽ không được đưa vào javascript được phát ra. Điều này là do TS với noResolve sẽ giả định rằng "mở rộng" là để mở rộng một giao diện chứ không phải một lớp, vì vậy nó sẽ bỏ qua việc nhập đó. Bạn có thấy điều tương tự không? – Breck