Tại sao nút shebang hoạt động cho Angular CLI nhưng không cho tệp của tôi?


1

Internet đang nói với tôi rằng Windows không hỗ trợ các dòng shebang nhưng rõ ràng Angular Cuses nó và nó hoạt động. Ví dụ về tệp sử dụng nó và hoạt động trên Windows: https://github.com/angular/angular-cli/blob/master/packages/%40angular/cli/bin/ng

Nếu tôi mở CMD, điều hướng đến thư mục với tệp đó và chạy đơn giản ng, Windows sẽ nhận ra rằng nó sẽ được chạy với nút và thực thi (tôi đoán) node ng. Nhưng nếu tôi thử điều đó với tập tin của riêng tôi, nó không hoạt động. Ví dụ về tập tin đó:

#!/usr/bin/env node
'use strict';

console.log("logging test");

Nếu tôi lưu tệp đó dưới dạng testvà chạy nó, tôi sẽ hiểu 'test' is not recognized as an internal or external command, operable program or batch file.Tại sao lại như vậy?

Đầu ra của where ng:

C:\Users\Dread\AppData\Roaming\npm\ng
C:\Users\Dread\AppData\Roaming\npm\ng.cmd

Đầu ra của là where nggì?
Mokubai

Cập nhật câu hỏi và bây giờ tôi hiểu. ng.cmd nằm trong đường dẫn của tôi và khi tôi chạy ng, cmd chạy tệp này. Tôi đã kiểm tra tập tin và thấy nó chỉ đơn giản là chạy tập tin ng đi kèm. Nếu tôi gỡ cài đặt trên toàn cầu ngvà lặp lại các bước trong câu hỏi, nó sẽ ngừng hoạt động. Tôi có đúng trong giả định của mình không?
Cậu bé đáng

Câu trả lời:


2

Từ đầu ra của bạn của where ngnó là rõ ràng những gì đang xảy ra.

Windows không hỗ trợ các dòng shebang, vì vậy những gì bạn đã đọc là chính xác. Những gì Windows hỗ trợ là phần mở rộng tệp và bạn có sẵn một phần mở rộng thực thi.

Bạn làmngnhưng nó không được chạy trực tiếp. ng.cmdgần như chắc chắn là một tập tin hàng loạt chạy node ng.

Khi bạn chạy ngcủa Windows đã tìm kiếm con đường của bạn cho tất cả các định dạng tập tin thực thi có thể ( exe, bat, cmd, vv) và chạy một đầu tiên phù hợp: ng.cmd.

Nếu bạn muốn chạy tập lệnh của mình thì bạn sẽ phải chạy nó dưới dạng đối số node, nghĩa là node testhoặc tạo một test.cmdtệp giống như vậy.


Windows (tốt, cmd.exe) cũng hỗ trợ đánh dấu khác nhau phần mở rộng như thực thi (% PATHEXT%) - theo mặc định thậm chí .js là trong đó, mặc dù nó đã được tuyên bố chủ quyền wscript ...
grawity

Nó có, nhưng đối với các tệp không được mở rộng như trong câu hỏi bạn phải sử dụng một trình trợ giúp "thực thi" của một số mô tả.
Mokubai
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.