Tính năng “Biên dịch khi lưu” của TypeScript không hoạt động trong Visual Studio 2015


83

Tính năng "Biên dịch khi lưu" không hoạt động đối với tôi sau khi nâng cấp lên Visual Studio 2015. Khi tôi thực hiện thay đổi đối với .tstệp trong dự án của mình và lưu, thanh trạng thái ở cuối IDE cho biết Output(s) generated successfully, nhưng .jstệp được tạo thì không không thay đổi.

Đây là những gì tôi đã thử:

  • thêm phần sau vào <Project>phần tử gốc trong của tôi .csproj:

    <PropertyGroup>
        <TypeScriptCompileOnSaveEnabled>True</TypeScriptCompileOnSaveEnabled>
    </PropertyGroup>
    
  • kiểm tra và bỏ chọn tùy chọn "Tự động biên dịch các tệp TypeScript không phải là một phần của dự án" trong Tools -> Options -> TypeScript -> Project:

    nhập mô tả hình ảnh ở đây

  • kiểm tra kỹ để đảm bảo rằng "Biên dịch khi lưu" được chọn trong thuộc tính Bản dựng TypeScript của dự án của tôi:

    nhập mô tả hình ảnh ở đây

Tôi đang thiếu gì?

Một lưu ý nhỏ, bước biên dịch TypeScript hoạt động như mong đợi khi được kích hoạt bởi một bản dựng thông thường.


Kiểm tra để đảm bảo rằng các tệp JS KHÔNG thực sự được cập nhật. Tôi đã gặp sự cố với VS2013 trong một thời gian khi 'Xem trước JS' không cập nhật, nhưng các tệp JS thực sự đang cập nhật. Mở một cách thủ công để xem mã có được cập nhật hay không. Nguyên nhân của điều này là không rõ nhưng giải pháp là tắt VS và mở lại nó. Tôi chưa thử tạo bất kỳ tệp TS nào trong VS2015.
Jason H

1
Họ đã phá vỡ nó vì RTM. Xem câu hỏi này stackoverflow.com/questions/31559653/…
Simon_Weaver

1
Tôi làm việc khi bạn điều hành visual studio với tư cách là quản trị viên!
alisabzevari

@alisabzevari Cảm ơn bạn đã đề xuất, nhưng chạy với tư cách quản trị viên không khắc phục được sự cố này cho tôi.
Nathan Friend

Câu trả lời:


138

Đối với tôi, đó là tùy chọn này trong tsconfig.json:

"compileOnSave": true,
"compilerOptions": { ... },

Khởi động lại Visual Studio để thay đổi này có hiệu lực.


Sử dụng angle2, đã cập nhật bảng chữ của tôi trong số nhiều thứ khác cho rc1 và tự nhiên mọi thứ bị hỏng cho đến khi cuối cùng tôi thấy rằng đây là vấn đề của mình. Tôi không cần nó cho đến khi tôi cập nhật lên 1.8.10.
James

4
có, thêm tùy chọn trong tsconfig.json và tải lại dự án nếu dự án được lưu trữ trong giải pháp VS. Sau đó ts sẽ được biên dịch thành js khi lưu.
ZZZ

1
Thêm "watch": truevào compilerOptionsđã làm việc cho tôi trên Visual Studio 2015 Cập nhật 2 với Typescript 1.8.29.0
Vahid Amiri

1
Vào một thời điểm nào đó trong khoảng thời gian của TypeScript 2, Visual Studio đã chuyển từ việc giữ các cài đặt này trong .csprojtệp sang chỉ sử dụng tsconfig.json. Nếu trang TypeScript thuộc tính của dự án của bạn không bị vô hiệu hóa, điều đó có nghĩa là bạn đã cài đặt phiên bản cũ của công cụ TypeScript cho Visual Studio và bạn nên cài đặt microsoft.com/en-us/download/details.aspx?id=48593
cchamberlain

32

Tôi tình cờ gặp vấn đề này hôm nay: Tôi đã khắc phục điều đó bằng cách sử dụng "watch":truetùy chọn trình biên dịch mới , cũng có sẵn thông qua JSON trong các phiên bản TypeScript gần đây nhất:

{
  "compilerOptions": {
    "watch": true
  }
}

Sau khi làm điều đó, tôi phải giải quyết một vấn đề khác liên quan đến lỗi sau xuất hiện trong cửa sổ đầu ra:

Object doesn't support property or method 'watchFile'

Hóa ra là hệ thống của tôi đang sử dụng phiên bản TypeScript (1.0.x) lỗi thời , mặc dù tôi chắc chắn rằng mình đã có một phiên bản mới hơn đi kèm với Visual Studio 2015 Update 1 (1.7). Nếu bạn gặp sự cố này, bạn có thể dễ dàng kiểm tra phiên bản tsc của mình bằng cách nhập tsc -vtừ dấu nhắc lệnh.

Nếu nó nói 1.0.xhoặc bất cứ điều gì <1,7, có thể là do bạn có một số tham chiếu cũ trong biến môi trường PATH của mình. Đảm bảo bạn đã cài đặt phiên bản 1.7 trở lên bằng cách kiểm tra bên trong thư mục Microsoft SDKs của bạn, là thư mục được Visual Studio sử dụng để cài đặt các gói TypeScript khi chúng được cập nhật:

C:\Program Files (x86)\Microsoft SDKs\TypeScript

Nếu không, hãy cập nhật cho phù hợp. Mở CPanel > Hệ thống > nâng cao > Environment Variables , chọn System Variables và nhấp chuột vào Chỉnh sửa ; duyệt qua danh sách để tìm bất kỳ tham chiếu nào đến thư mục TypeScript, thay đổi một trong số chúng để làm cho nó trỏ đến phiên bản được cài đặt gần đây nhất của TypeScript ( 1.7hoặc cao hơn) và xóa bất kỳ bản sao nào khác. Xem thêm ảnh chụp màn hình bên dưới:

nhập mô tả hình ảnh ở đây

Để biết thêm chi tiết, hãy đọc bài đăng này trên blog của tôi.


1
Đối với tôi trên win10, tên trong danh sách là "Đường dẫn" chứ không phải biến hệ thống. Khi bạn chọn điều đó (giá trị của nó là một chuỗi dài được nối bằng dấu chấm phẩy), sau đó nhấp vào chỉnh sửa, bạn sẽ thấy cửa sổ phương thức hiển thị trong câu trả lời này. Giải pháp của tôi là KHÔNG để thêm compileroptions> đồng hồ> đúng, nhưng để thiết compileOnSave> đúng (một bước lên từ compileroptions)
BobbyTables

1
Đối với tôi, việc đặt tùy chọn này đã gây ra lỗi bản dựng JsErrorScriptException (0x30001). Sau khi tìm kiếm, tôi gặp vấn đề này github.com/Microsoft/TypeScript/issues/7362 . Giải pháp của Miłosz Wierzbicki (thiết lập "compileOnSave") phù hợp với tôi, nhưng chỉ sau khi khởi động lại VS.
fikkatra

Tôi đã từng gặp vấn đề tương tự. U và @zedd đã tiết kiệm cho tôi rất nhiều giờ. Bài đăng này cũng hữu ích: ryadel.com/en/… .
Dudi

7

Giải pháp:

Đối với tôi, và tôi khá chắc chắn đây cũng là trường hợp của những người khác, điều này là do lỗi trong tsconfig.json.

Bạn cần thêm "compileOnSave": true. Nhưng trong phần toàn cục không bên trong compilerOptions.

Wrong:
{
  "compilerOptions": {
    "noImplicitAny": false,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5",
    "compileOnSave": true

  },
  "exclude": [
    "node_modules",
    "wwwroot"
  ]
}

Correct:
{
  "compilerOptions": {
    "noImplicitAny": false,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5"

  },
"compileOnSave": true,
  "exclude": [
    "node_modules",
    "wwwroot"
  ]
}

Trân trọng,

Anders Cả Basechat.


6

Vấn đề này dường như đã được giải quyết với bản cập nhật gần đây nhất cho TypeScript Language Servicestiện ích mở rộng.

Xem câu trả lời này để biết hướng dẫn về cách áp dụng bản cập nhật này.


2

Trong trường hợp của tôi, tôi đã cài đặt Visual Studio Community 2015 cùng với VS 2012. Tôi đã sử dụng Web Essentials cho typecript vào năm 2012 có vẻ như xung đột với năm 2015.

Gỡ cài đặt Web Essentials vào năm 2012 đã khắc phục sự cố cho tôi.


Tôi đang sử dụng VS Community và việc gỡ cài đặt Web Essentials đã giúp tôi. Cảm ơn và ủng hộ!
Ray

2

Với typecript 2, bạn phải xóa "outDir": khỏi tsconfig của mình. Sửa lỗi cho tôi trong studio trực quan.


Tsconfig vượt trội ở đâu? Thx
jay

@jay Bạn không nhìn thấy tùy chọn trong tệp cấu hình tsconfig.json của bản ghi?
Yvan

1

Trong thuộc tính dự án -> "TypeScript Build", bạn cũng có thể chỉ cần bỏ chọn "Không phát ra kết quả đầu ra nếu có bất kỳ lỗi nào được báo cáo." Việc kiểm tra nó có vẻ như sẽ vô hiệu hóa tính năng chuyển đổi khi lưu, nếu có lỗi hoặc không.


1

"compileOnSave": true,không làm việc cho tôi. Cuối cùng tôi đã phát hiện ra rằng Visual Studio không tôn trọng "compileOnSave": true,giá trị nếu nó được xác định trong một .jsontệp khác mà bạn đang mở rộng. Nó phải ở trong root để nó hoạt động.


1

định vị tệp, tức là C: \ file.ts trong của bạn terminal/cmdvà nhập

tsc file.ts -w // watches for file changes and converts on save

1

Kiểm tra xem bạn đã cài đặt phiên bản TypeScript được cấu hình trong dự án chưa. Bằng cách nào đó, tôi không nhận được cảnh báo rằng tôi chưa cài đặt TypeScript 3.7, nhưng tính năng biên dịch khi lưu đã ngừng hoạt động âm thầm.

Sau khi tôi cài đặt TypeScript 3.7, nó đã hoạt động trở lại.


0

Chính xác vấn đề tương tự ở đây. Tôi đang sử dụng Visual Studio 2015 update 3 và TypeScript 2.9.2.0. Trong công cụ / tùy chọn / dự án và giải pháp / công cụ web bên ngoài, tôi đã nâng cấp $ (PATH) lên vị trí thứ hai. Với tất cả các cấu hình này, compileOnSave: true không hoạt động với tôi. Giải pháp thay thế là mở một dòng lệnh, chạy ng build --watchở bên cạnh và để nút tự động biên dịch


0

Không chắc chắn nếu điều này sẽ giúp bất cứ ai.

Mặc dù tôi đang gặp sự cố khi biên dịch, nhưng nó đang biên dịch khi lưu. Tôi chỉ không bật thanh công cụ trình khám phá giải pháp của mình để hiển thị tất cả các tệp.

Tập tin đã ở đó, chỉ cần nôn nóng chờ được thêm vào dự án.

nhập mô tả hình ảnh ở đây


0

Tôi đã gặp sự cố tương tự nhưng không tương tự trong Visual Studio 2019

  • Dự án của tôi được thiết lập để sử dụng TypeScript 2.9
  • Tôi đã cài đặt TypeScript 3.8 và mã đã biên dịch, nhưng sẽ không biên dịch khi lưu

Tôi đã cài đặt phiên bản cũ hơn, TypeScript 2.9, khởi động lại VS và sau đó nó hoạt động

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.