Tìm kiếm trang web

typescript - grunt-ts không hoạt động khi tệp thay đổi


Tôi đang sử dụng grunt:

  "dev-build": {
                src: ["src/**/*.ts", "typings/vendors.d.ts","typings/tsd.d.ts", "!libs/**/*.ts"],
                    outDir: "artifacts/dev",
                    watch: "src/**/*",
                    options: {
                        // comments: true,
                  //      baseDir: 'src/',
                        module: "amd",
                        target: "es5",
                        sourceMap: true,
                        declaration: true, //inlineSourceMap :true,
                        //emitDecoratorMetadata:true,
                        //experimentalDecorators:true,

                    }               

            }

và mọi thứ biên dịch ổn:

"Biên dịch TypeScript hoàn tất: 8,97 giây cho 256 tệp TypeScript."

nhưng sau đó sau khi thay đổi một tệp (thêm một dòng ngắt) mà không thay đổi mã, việc biên dịch bị lỗi với chế độ theo dõi:

### changed  >>src/FxsPortal/FxsBaseItemViewModel.ts
Compiling...
### Fast Compile >>src/FxsPortal/FxsBaseItemViewModel.ts
Using tsc v1.6.2
C:/dev/AscendXYZ Portal/src/FxsPortal/FxsBaseItemViewModel.ts(2,21): error TS2307: Cannot find module 'knockout'.

Tôi biết không có lỗi vì tôi có thể biên dịch tất cả thủ công. Tôi dường như không hiểu tại sao nó không hoạt động khi watch của ts-grunt kích hoạt.

Câu trả lời #1

Để tham khảo, tôi chỉ muốn chia sẻ cách tôi đã giải quyết vấn đề này bằng cách sử dụng một thiết bị theo dõi bên ngoài.

 watch: {
            devBuildWatch: {
                files: ['src/**/*'],
                tasks: ['ts:devBuild'],
                options: {
                    spawn: false,
                },
            }
        },

và một hành động onchange

 var changedFiles = {};

    var onChange = grunt.util._.debounce(function () {
        grunt.config('ts.devBuild.src', Object.keys(changedFiles).concat([ "typings/vendors.d.ts","typings/tsd.d.ts", "!libs/**/*.ts"]));
        changedFiles = Object.create(null);
    }, 50);

    grunt.event.on('watch', function (action, filepath) {
        changedFiles[filepath] = action;
        onChange();
    });

Câu trả lời #2

Tôi dường như không hiểu tại sao nó không hoạt động khi đồng hồ của ts-grunt kích hoạt.

Những lỗi đó có thể bỏ qua một cách an toàn. Lý do chúng xuất hiện là vì grunt chỉ đang chạy tsc từ dòng lệnh và chỉ truyền cho nó từng tệp riêng lẻ.

Thêm

Nếu bạn thực sự quan tâm bạn có thể sử dụng các thẻ reference để đưa vào các tệp .d.ts toàn cục (các tệp không được đưa vào thông qua import/require). Nhưng tôi đặc biệt khuyên chống lại việc này. Bạn nên mở một IDE có thể cho bạn thấy các lỗi thật sự (...cough atom-ts ...) 🌹