Không có cách nào trực tiếp để thực hiện việc này.
Đây thường là nhiệm vụ phía máy chủ: máy chủ xử lý để tạo HTML bắt buộc.
Các thành phần web là tất cả về phía khách hàng, vì vậy chúng hoạt động trên những gì đã được phân phối cho trình duyệt.
Tuy nhiên, build.dart
tập lệnh được thực thi mỗi khi một tệp trong dự án của bạn thay đổi để bạn có thể mở rộng tập lệnh để có được những gì bạn muốn. Tôi không nghĩ đây là một cách tiếp cận tốt, nhưng nó giải quyết vấn đề của bạn.
Đầu tiên thêm placeholder sau vào tập tin mục tiêu html (trong trường hợp của tôi web/webuitest.html
):
<header></header>
Bây giờ thêm một file header.html
để dự án của bạn với một số nội dung:
THIS IS A HEADER
Bây giờ mở rộng build.dart
tập lệnh để nó sẽ kiểm tra xem header.html
đã được sửa đổi hay chưa và nếu có, nó sẽ cập nhật webuitest.html
:
// if build.dart arguments contain header.html in the list of changed files
if (new Options().arguments.contains('--changed=web/header.html')) {
// read the target file
var content = new File('web/webuitest.html').readAsStringSync();
// read the header
var hdr = new File('web/header.html').readAsStringSync();
// now replace the placeholder with the header
// NOTE: use (.|[\r\n])* to match the newline, as multiLine switch doesn't work as I expect
content = content.replaceAll(
new RegExp("<header>(.|[\r\n])*</header>", multiLine:true),
'<header>${hdr}</header>');
// rewrite the target file with modified content
new File('web/webuitest.html').writeAsStringSync(content);
}
Một hệ quả của phương pháp này là viết lại mục tiêu sẽ kích hoạt build.dart
một lần nữa, vì vậy tệp đầu ra sẽ được tạo hai lần, nhưng đó không phải là vấn đề lớn.
Tất nhiên, điều này có thể được thực hiện tốt hơn nhiều, và ai đó thậm chí có thể quấn nó vào một thư viện.
Nguồn
2013-06-02 22:17:53
Không phải là rất đẹp, nhưng nó hoạt động. Cảm ơn. – JJJ
đúng, nó xấu xí như địa ngục :) Trên thực tế, tôi nghĩ về việc xây dựng một thư viện cho điều này, nhưng quyết định không, vì nó không phải là một cái gì đó tôi muốn nhìn thấy thường xuyên. –
@Juhana, BTW, ban đầu tôi nghĩ về việc viết lại các tệp trong thư mục 'out', nhưng trình soạn thảo cũng giám sát các tệp này (tôi nghĩ có một lỗi được gửi cho điều này) để nó kích hoạt một vòng lặp xây dựng lại vô hạn –