ソースを参照

fix: poor man's hot reload

version-14
Faris Ansari 3年前
コミット
f58254db78
3個のファイルの変更54行の追加19行の削除
  1. +22
    -19
      esbuild/esbuild.js
  2. +28
    -0
      frappe/public/js/frappe/build_events/build_events.bundle.js
  3. +4
    -0
      frappe/sessions.py

+ 22
- 19
esbuild/esbuild.js ファイルの表示

@@ -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;
}

+ 28
- 0
frappe/public/js/frappe/build_events/build_events.bundle.js ファイルの表示

@@ -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);


+ 4
- 0
frappe/sessions.py ファイルの表示

@@ -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()


読み込み中…
キャンセル
保存