Sau khi nhìn xung quanh một chút, tôi quyết định tạo một giải pháp đơn giản để giải quyết vấn đề này và tôi đang đăng bài này cho tất cả mọi người quan tâm cũng làm như vậy. Tất cả chúng ta cần là một máy chủ tập tin http tĩnh trỏ đến android xây dựng thư mục:
<project_folder>/platforms/android/assets/www
Nó như vậy sẽ xảy ra sau khi một xây dựng thành công, thư mục có tất cả các file để phục vụ, bao gồm cordova.js
, cordova_plugins.js
và cả plugins
thư mục với tệp javascript của họ.
Vì nút hiện diện, thật dễ dàng để tạo một máy chủ http 'nhanh' với nút/express. Đây là kịch bản tôi soạn thảo (cảm thấy tự do để sửa đổi cho nhu cầu của bạn).
livesrv.js:
var express = require('express');
var server = express();
var http = require('http').Server(server);
var port = 80;
var static_root = process.argv[2] || '<YOUR_PROJECT_FOLDER>/platforms/android/assets/www';
server.all('/*', function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});
server.use(function(req, res, next)
{
console.log('--> '+req.url);
if(req.url.match(/(.png|.jpg|.jpeg|.svg|.woff|.woff2|.ttf|.otf|.eot)/)) {
res.header('Cache-Control', 'max-age=691200');
} else {
res.header('Cache-Control', 'max-age=0, no-cache, no-store, must-revalidate');
res.header('Pragma', 'no-cache');
res.header('Expires', 'Thu, 01 Jan 1970 00:00:01 GMT');
}
next();
});
server.use(express.static(static_root));
http.listen(port, function() {
console.log("startup: server started @ port " + port + ", root:"+static_root);
});
Khi bạn khởi động ứng dụng nút này, các file dự án của bạn (js/css/html) có thể nhìn thấy các bản cập nhật trực tiếp từ điện thoại của bạn (Chú ý: đây cho thấy nguồn của bạn, vì vậy bạn phải có một số ý tưởng gì bạn đang làm trước khi sử dụng tập lệnh này). Đối với những người cần hướng dẫn chi tiết:
- Lưu đoạn mã trên vào một tập tin 'livesrv.js' trong một thư mục trống
- Mở một dấu nhắc lệnh đến thư mục đó
- Run một lần 'NPM cài đặt nhanh' (nếu không được cài đặt trên toàn cầu)
- Chạy máy chủ bằng lệnh
node livesrv <your_project_folder>/platforms/android/assets/www
Bước tiếp theo: thay đổi config.xml
HTML khởi đầu của dự án của bạn để trỏ vào tập tin HTML khác (trong trường hợp này tôi đã chọn 'main.html')
Tạo 'main.html' là không có gì hơn một 'bootstrap' cho máy chủ.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Security-Policy" content="">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport">
</head>
<body>
<script>
console.log("Starting..");
setTimeout(function() {
console.log("Booting app..");
window.location.href = "http://<YOUR_SERVER_IP>/index.html";
}, 200);
</script>
</body>
</html>
Tất cả điều này là tải `index.html 'từ máy chủ. Đừng quên cập nhật YOUR_SERVER_IP bằng chính bạn (địa chỉ ip của máy chủ chạy máy chủ nút).
Bước cuối cùng: Tôi đặt nút webapp vào một nơi nào đó (bạn có thể sử dụng phần 'tĩnh' của ứng dụng, ví dụ như biểu tượng cố định nếu bạn có), cho phép bạn kích hoạt lại.
$('#mylogo').on('click', function() {
console.log("Reloading..");
window.location.reload();
});
Và điều đó phù hợp với tôi. Sau khi xây dựng/cài đặt ban đầu, mọi lúc tôi nhấn biểu tượng ứng dụng đang tải lại nội dung (cập nhật) từ máy chủ để không cần phải xây dựng lại. Hãy thử điều này và cho tôi biết nếu nó hoạt động cho bạn. Đừng quên cho phép kết nối thiết bị với máy chủ (ví dụ: bật wifi!)
Để phát hành ứng dụng, hãy đổi lại điểm bắt đầu thành index.html
và xóa nút tải lại.
Nhược điểm/hạn chế:
- Khi bạn tải lại, kết nối DOM visual studio của bị mất với ứng dụng mục tiêu (ít nhất là trong các thử nghiệm của tôi)
- Nhìn chung phải là một giải pháp đơn giản/tự động.
- Không cần phải xây dựng lại nếu bạn đã thêm plugin sau lần xây dựng thực tế cuối cùng.
Lợi ích:
- ứng dụng tức thì trên thiết bị cập nhật, loại bỏ thời gian xây dựng khi có thay đổi trong nội dung js/css/html
tôi có thể đã bỏ qua điều gì đó, đặc biệt nếu có các dịch vụ sẵn sàng mà tôi có thể sử dụng để đạt được điều này, vì vậy nếu bạn biết bất cứ điều gì đơn giản hóa điều này xin vui lòng cho tôi biết. Vì vậy, cảm thấy tự do để critisize tất cả các bên trên như tôi rất quan tâm để đọc ý tưởng của bạn. Btw, nếu bất cứ ai quan tâm để làm cho một plugin của V/S, tôi thực sự rất thích sử dụng nó.
Chúc mừng!
Cảm ơn câu trả lời của bạn. Tôi có thể hỏi bạn một số chi tiết cụ thể hơn về những gợi ý này không? Ví dụ: ý của bạn là gì theo 'phương pháp tải xuống cordova chuẩn'? Nếu bạn có thể xây dựng một chút tôi sẽ đánh giá cao nó. Cảm ơn trước – mtso
@mtso Điều này sẽ cung cấp cho bạn một chút thông báo về https://cordova.apache.org/docs/en/2.8.0/cordova/file/filetransfer/filetransfer.html – Matthew
@mtso Oh yeah, xin lỗi để trả lời muộn. ;-) – Matthew