2013-07-04 29 views
13

Giảm thiểu Javascript thường sẽ xóa tất cả nhận xét khỏi nguồn. Điều này có nghĩa là thông tin giấy phép cũng bị xóa.javascript minification xóa giấy phép?

Nếu tôi chạy một trang web lớn và tôi muốn tuân theo giấy phép, điều đó có nghĩa là tôi không thể sử dụng tính năng rút gọn tự động không? Không có tùy chọn để "giữ lại nhận xét đầu tiên, nhưng không phải là những chú thích khác " phải không?

Tôi hỏi vì một công ty khá lớn đã sử dụng một số mã tôi đã viết và không bao gồm giấy phép của tôi (MIT), nhưng trước khi tôi nhận được tất cả peeved, tôi muốn đặt mình vào giày của họ.

chỉnh sửa:
Dường như là tác giả gánh nặng trên ta nhận xét giấy phép theo cách như vậy (xem câu trả lời) mà nó không nhận được gỡ bỏ trong việc rút gọn. Tôi đồng ý với việc đó trước tiên, và sau đó nêu lên một stink nếu giấy phép của tôi là vẫn còn bị xóa

Trả lời

7

Đây là một trường hợp điển hình của việc " nó phụ thuộc ".

Nó phụ thuộc vào bộ giảm âm. Ví dụ: UglifyJS sẽ để lại trong khối nhận xét ban đầu trong một tệp trừ khi bạn nói cụ thể là không được gắn cờ -nc. Những người khác (như Trình biên dịch đóng cửa của Google) tìm chú thích đặc biệt (ví dụ: @license hoặc @preserve). Một số nhận xét "lớn" tôn trọng (ví dụ: /*! ... */) trong khi những nhận xét khác thì không.

Phụ thuộc vào cách bạn rút gọn. Một số tổ chức tích cực giảm thiểu và ghép mọi thứ để vắt từng byte. Những người khác đang thêm các giấy phép trong kiểm soát nguồn và "để chúng trong" trong khi rút gọn. Những người khác đang áp dụng các tệp giấy phép sau khi mọi thứ đã được ghép nối với nhau.

Có thể dễ dàng bỏ một số giấy phép trong bản dựng sản phẩm của họ, đặc biệt nếu chúng tích hợp nối tất cả thư viện mà họ sử dụng vào một tệp JS duy nhất. Họ thậm chí có thể không biết rằng họ đang làm điều đó. Đặt cược tốt nhất của bạn ở đây có lẽ chỉ là để tiếp cận và yêu cầu họ đảm bảo rằng họ đang tôn trọng các điều khoản của giấy phép và để lại văn bản giấy phép trên đó - họ thậm chí có thể không nhận ra rằng họ đang làm việc đó.

6

Google Closure Compiler hỗ trợ @preserve and @license annotations mà nói với nó để giữ cho các bình luận:

/** 
* @preserve Copyright 2009 SomeThirdParty. 
* Here is the full license text and copyright 
* notice for this file. Note that the notice can span several 
* lines and is only terminated by the closing star and slash: 
*/ 

UglifyJS hỗ trợ tùy chọn dòng lệnh, --comments, chấp nhận một regex. Bất kỳ ý kiến ​​phù hợp với regex sẽ được bảo quản trong đầu ra.

Câu trả lời khác cho thấy rằng các bộ phận khai thác khác cũng hỗ trợ tính năng này. Bạn sẽ phải đọc tài liệu cho trình khai thác đã chọn để xác định cú pháp/kỹ thuật chính xác để sử dụng trong trường hợp của riêng bạn.

+0

Ví dụ về định dạng giúp.Tôi đã có phần '@ license' ở phần cuối của bình luận, và tôi đã để lại một bình luận trống trong tệp đã được rút gọn. Dường như Closure sẽ giữ bất cứ điều gì _after_ chú thích '@ license'. –

1

Thông tin giấy phép có thể được giữ nguyên. Ví dụ: máy nén YUI có thể làm điều đó:

Nhận xét kiểu C bắt đầu bằng/*! được bảo tồn. Điều này hữu ích với các nhận xét chứa thông tin bản quyền/giấy phép.

(Documentation)

0

Nó phụ thuộc của công cụ rút gọn của bạn

/** Notice 
    * 
    * 
**/ 

hoặc

/*! 
* 
* 
*/ 

Nhìn vào tài liệu công cụ của bạn

+2

Nhưng với tư cách là nhà phát triển, bạn không có quyền kiểm soát hoặc kiến ​​thức về các công cụ được sử dụng bởi những người sử dụng mã của bạn. – HBP

0

Nó phụ thuộc vào công cụ minifier/API được sử dụng. Mặc dù ý kiến ​​quan trọng có thể được để lại trong đầu ra của bộ giảm âm nếu công cụ hỗ trợ nó. Sau đây là định dạng cho ý kiến ​​quan trọng

/*! 
* Your comment...1 
* ...... 
* Your comment...n 
*/ 

sau công cụ trực tuyến đơn giản mà có thể được sử dụng để rút gọn mã javascript, mà tôi tìm thấy giữ gìn ý kiến ​​quan trọng:

http://utilninja.com/Computing/JavascriptMinifier

0

Một vài nhiều năm sau nhưng ...

Ngoại trừ các bộ giảm âm loại bỏ mã chết, bạn có thể mã hóa tham chiếu đến t anh ta cấp giấy phép cho một thứ không phải là bình luận với tiền tố không gian tên.

Dành cho JS một cái gì đó như;

var NS_LICENSE_URL = "Cool Inc. - Apache 2.0 - http://github.com/nfisher/cooljs/LICENSE.txt"; 

Đối với CSS giống như;

.ns_license_url { 
    content: "Cool Inc. - Apache 2.0 - http://github.com/nfisher/cooljs/LICENSE.txt"; 
} 

Hoặc bạn có thể sao chép toàn bộ giấy phép. Cũng có thể thêm bảng điều khiển.cho JS để in nó vào bàn điều khiển nhưng có thể quá tải.

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