2016-01-06 19 views
5

Tôi đang làm việc với aurelia-typescript-skeleton làm cơ sở cho dự án mới của tôi. Tôi cố gắng thêm một hello.ts file mới trong thư mục srcLỗi khi tham chiếu các mô-đun TypeScript TS2307 của tôi: Không thể tìm thấy mô-đun

export class Hello { 
    sayHello(name:string) : string { 
    return 'Hello ' + name; 
    } 
} 

và tham chiếu nó trong một tập tin trong thư mục tương tự như dưới đây

import {Hello} from './hello'; 

export class Users { 
    constructor() { 
    console.log(new Hello().sayHello('Test')); 
    } 
} 

Cả các tập tin là ở cấp cùng một thư mục. Mọi thứ hoạt động tốt khi tôi xây dựng lần đầu tiên. Khi tôi thực hiện bất kỳ thay đổi tiếp theo nào trên tệp users.ts, việc biên dịch gulp-typescript không bị lỗi với lỗi mà tôi không thể hiểu được. Lỗi từ trình biên dịch bản ghi là

> Starting 'build-system'... 
> src\users.ts(4,21): error TS2307: Cannot find module 'hello'. 
> TypeScript: 1 semantic error 
> TypeScript: emit succeeded (with errors) 
> Finished 'build-system' after 950 ms 

Bất cứ khi nào tôi làm tươi gulp watch, không có lỗi. Lỗi xuất hiện khi tôi chỉnh sửa/thay đổi tệp users.ts. Bất cứ ai có thể giúp tôi hiểu lỗi này? Nó phải là nội dung cơ bản ...

Tôi đang sử dụng môi trường Windows 7 và gặp lỗi này trên 2 máy.

CẬP NHẬT:

Đây là repo to reproduce the problem. Các bước để tạo lại:

  1. Sao chép lại, cài đặt tất cả các phụ thuộc npmjspm.
  2. Chạy gulp watch -> không xảy ra lỗi cho tôi
  3. Thay đổi users.ts tệp và lưu -> lỗi xảy ra.

UPDATE2:

Thêm một bước clean trước build-system giúp để tránh vấn đề. Đây là the link to commit. Tuy nhiên tôi không chắc chắn về nguyên nhân thực sự của vấn đề ngay từ đầu.

+0

Vui lòng thêm thông báo lỗi từ gulp. –

+0

@MartinVseticka Xem đầu ra giao diện điều khiển trong câu hỏi - đó là những gì tôi nhận được từ nhiệm vụ gulp – Mikhail

+0

Tôi đã cố gắng tải xuống bản repo và cài đặt nó [ubuntu 15.10]. Các kịch bản xây dựng dường như làm việc cho tôi. Tôi chỉ phải thay thế '/aurelia-typescript-sk/jspm_packages/github/aurelia/[email protected]/aurelia-fetch-client.d.ts' (chứa lỗi) với một số bản sửa lỗi: https://pastee.org/v5ghs Đầu ra 'gulp watch' của tôi: https://pastee.org/pzskc –

Trả lời

0

Đó là vì chỉ users.ts, tệp đã thay đổi, được gửi đến bản biên dịch TS tiếp theo, trong khi noResolve được bật (trong tsconfig.json).

Xin xem tập tin build/tasks/build.js, nhiệm vụ 'build-system':

.pipe(changed(paths.output, {extension: '.js'})) 

gì tập tin được thay đổi được xác định (bằng cách gulp-changed) bằng cách so sánh thời gian sửa đổi cuối cùng của tập tin đầu vào với đích. Vì vậy, khi bạn chạy clean hoặc watch, liên quan đến clean, đích sẽ được làm sạch và tất cả các tệp được gửi để biên dịch lại, do đó không có lỗi.

Khi tôi thử ứng dụng bộ xương cập nhật (1.0.0-beta.1.2.2), sự cố này đã được khắc phục.

+0

Vậy, trình biên dịch có thể biên dịch chỉ một tệp không? (và loại thông minh để giải quyết các phụ thuộc) Tại sao nó hoạt động trên ubuntu? – Mikhail

+0

TS thực sự có thời gian biên dịch [độ phân giải mô-đun] (https://github.com/Microsoft/TypeScript-Handbook/blob/master/pages/Module%20Resolution.md). Nhưng vì noResolve được bật, các tệp được giải quyết KHÔNG được tự động đưa vào trong quá trình biên dịch. – qtuan

Các vấn đề liên quan