core&ui: enhanced template hot reload

pull/564/head
undefined 1 year ago
parent b5d51f3372
commit 5588fd9a9d
No known key found for this signature in database

@ -18,7 +18,7 @@ export function register(cli: CAC) {
let addons = JSON.parse(fs.readFileSync(addonPath).toString()); let addons = JSON.parse(fs.readFileSync(addonPath).toString());
if (operation === 'create') { if (operation === 'create') {
const dir = `${addonDir}/${name || 'addon'}`; const dir = `${addonDir}/${name || 'addon'}`;
fs.mkdirSync(dir); fs.mkdirSync(dir, { recursive: true });
child.execSync('yarn init -y', { cwd: dir }); child.execSync('yarn init -y', { cwd: dir });
fs.mkdirSync(`${dir}/templates`); fs.mkdirSync(`${dir}/templates`);
fs.mkdirSync(`${dir}/locales`); fs.mkdirSync(`${dir}/locales`);

@ -147,8 +147,10 @@ export async function template(pending: string[], fail: string[]) {
try { try {
const files = await getFiles(p); const files = await getFiles(p);
for (const file of files) { for (const file of files) {
if (file.endsWith('.tsx')) global.Hydro.ui.template[file] = require(path.resolve(p, file)); const l = path.resolve(p, file);
global.Hydro.ui.template[file] = await fs.readFile(path.resolve(p, file), 'utf-8'); if (file.endsWith('.tsx')) global.Hydro.ui.template[file] = require(l);
global.Hydro.ui.template[file] = await fs.readFile(l, 'utf-8');
if (process.env.DEV) global.Hydro.ui.template[`${file}.source`] = l;
} }
logger.info('Template init: %s', i); logger.info('Template init: %s', i);
} catch (e) { } catch (e) {

@ -17,10 +17,12 @@ else template &&= findFileSync(template);
class Loader extends nunjucks.Loader { class Loader extends nunjucks.Loader {
getSource(name) { getSource(name) {
if (!template) { const src = global.Hydro.ui.template[name];
if (!global.Hydro.ui.template[name]) throw new Error(`Cannot get template ${name}`); const ref = global.Hydro.ui.template[`${name}.source`];
if (!process.env.DEV) {
if (!src) throw new Error(`Cannot get template ${name}`);
return { return {
src: global.Hydro.ui.template[name], src,
path: name, path: name,
noCache: false, noCache: false,
}; };
@ -28,10 +30,11 @@ class Loader extends nunjucks.Loader {
let fullpath = null; let fullpath = null;
const p = path.resolve(template, name); const p = path.resolve(template, name);
if (fs.existsSync(p)) fullpath = p; if (fs.existsSync(p)) fullpath = p;
if (!fullpath && ref && fs.existsSync(ref)) fullpath = ref;
if (!fullpath) { if (!fullpath) {
if (global.Hydro.ui.template[name]) { if (src) {
return { return {
src: global.Hydro.ui.template[name], src,
path: name, path: name,
noCache: true, noCache: true,
}; };
@ -39,7 +42,7 @@ class Loader extends nunjucks.Loader {
throw new Error(`Cannot get template ${name}`); throw new Error(`Cannot get template ${name}`);
} }
return { return {
src: fs.readFileSync(fullpath, 'utf-8').toString(), src: fs.readFileSync(fullpath, 'utf-8'),
path: fullpath, path: fullpath,
noCache: true, noCache: true,
}; };

Loading…
Cancel
Save