fix: poor man's hot reload

This commit is contained in:
Faris Ansari 2021-07-11 17:21:06 +05:30
parent b8fbed0f66
commit f58254db78
3 changed files with 54 additions and 19 deletions

View file

@ -280,10 +280,24 @@ function get_watch_config() {
assets_json,
prev_assets_json
} = await write_assets_json(result.metafile);
let changed_files;
if (prev_assets_json) {
log_rebuilt_assets(prev_assets_json, assets_json);
changed_files = get_rebuilt_assets(
prev_assets_json,
assets_json
);
let timestamp = new Date().toLocaleTimeString();
let message = `${timestamp}: Compiled ${changed_files.length} files...`;
log(chalk.yellow(message));
for (let filepath of changed_files) {
let filename = path.basename(filepath);
log(" " + filename);
}
log();
}
notify_redis({ success: true });
notify_redis({ success: true, changed_files });
}
}
};
@ -453,7 +467,7 @@ function run_build_command_for_apps(apps) {
process.chdir(cwd);
}
async function notify_redis({ error, success }) {
async function notify_redis({ error, success, changed_files }) {
// notify redis which in turns tells socketio to publish this to browser
let subscriber = get_redis_subscriber("redis_socketio");
subscriber.on("error", _ => {
@ -475,7 +489,8 @@ async function notify_redis({ error, success }) {
}
if (success) {
payload = {
success: true
success: true,
changed_files
};
}
@ -505,7 +520,7 @@ function open_in_editor() {
subscriber.subscribe("open_in_editor");
}
function log_rebuilt_assets(prev_assets, new_assets) {
function get_rebuilt_assets(prev_assets, new_assets) {
let added_files = [];
let old_files = Object.values(prev_assets);
let new_files = Object.values(new_assets);
@ -515,17 +530,5 @@ function log_rebuilt_assets(prev_assets, new_assets) {
added_files.push(filepath);
}
}
log(
chalk.yellow(
`${new Date().toLocaleTimeString()}: Compiled ${
added_files.length
} files...`
)
);
for (let filepath of added_files) {
let filename = path.basename(filepath);
log(" " + filename);
}
log();
}
return added_files;
}

View file

@ -7,6 +7,34 @@ let error = null;
frappe.realtime.on("build_event", data => {
if (data.success) {
// remove executed cache for rebuilt files
let changed_files = data.changed_files;
if (Array.isArray(changed_files)) {
for (let file of changed_files) {
if (file.includes(".bundle.")) {
let parts = file.split(".bundle.");
if (parts.length === 2) {
let filename = parts[0].split("/").slice(-1)[0];
frappe.assets.executed_ = frappe.assets.executed_.filter(
asset => !asset.includes(`${filename}.bundle`)
);
}
}
}
}
// update assets json
frappe.call("frappe.sessions.get_boot_assets_json").then(r => {
if (r.message) {
frappe.boot.assets_json = r.message;
if (frappe.hot_update) {
frappe.hot_update.forEach(callback => {
callback();
});
}
}
});
show_build_success(data);
} else if (data.error) {
show_build_error(data);

View file

@ -159,6 +159,10 @@ def get():
return bootinfo
@frappe.whitelist()
def get_boot_assets_json():
return get_assets_json()
def get_csrf_token():
if not frappe.local.session.data.csrf_token:
generate_csrf_token()