rebundle when routes and templates change

This commit is contained in:
Rich Harris
2017-12-20 17:34:23 -05:00
parent cd91bf2ca4
commit fefb0d96d7
9 changed files with 257 additions and 73 deletions

View File

@@ -1,5 +1,6 @@
const fs = require('fs');
const path = require('path');
const chokidar = require('chokidar');
const route_manager = require('../route_manager.js');
const { src, dest, server_routes, dev } = require('../config.js');
@@ -7,7 +8,7 @@ function posixify(file) {
return file.replace(/[\/\\]/g, '/');
}
module.exports = function create_app() {
function create_app() {
const { routes } = route_manager;
function create_client_main() {
@@ -64,7 +65,12 @@ module.exports = function create_app() {
fs.utimesSync(server_routes, new Date(atime.getTime() - 999999), new Date(mtime.getTime() - 999999));
}
// TODO in dev mode, watch files
create_client_main();
create_server_routes();
};
}
if (dev) {
route_manager.onchange(create_app);
}
module.exports = create_app;

View File

@@ -1,7 +1,9 @@
const fs = require('fs');
const path = require('path');
const chalk = require('chalk');
const compilers = require('./compilers.js');
const generate_asset_cache = require('./generate_asset_cache.js');
const { dest } = require('../config.js');
function deferred() {
const d = {};
@@ -24,6 +26,12 @@ module.exports = function create_watcher() {
deferreds.client.promise,
deferreds.server.promise
]).then(([client_stats, server_stats]) => {
const client_info = client_stats.toJson();
fs.writeFileSync(path.join(dest, 'stats.client.json'), JSON.stringify(client_info, null, ' '));
const server_info = server_stats.toJson();
fs.writeFileSync(path.join(dest, 'stats.server.json'), JSON.stringify(server_info, null, ' '));
return generate_asset_cache(
client_stats.toJson(),
server_stats.toJson()

View File

@@ -6,7 +6,10 @@ const route_manager = require('../route_manager.js');
const { dest } = require('../config.js');
module.exports = function generate_asset_cache(clientInfo, serverInfo) {
const main_file = `/client/${clientInfo.assetsByChunkName.main}`;
let main_file = Array.isArray(clientInfo.assetsByChunkName.main) ?
`/client/${clientInfo.assetsByChunkName.main[0]}` : // omg webpack what the HELL are you doing
`/client/${clientInfo.assetsByChunkName.main}`;
const chunk_files = clientInfo.assets.map(chunk => `/client/${chunk.name}`);
const service_worker = generate_service_worker(chunk_files);