update folder structure (#432)

This commit is contained in:
Rich Harris
2018-09-19 12:02:11 -04:00
parent f29e7efbd6
commit 8f064fe5ac
59 changed files with 680 additions and 27 deletions

View File

@@ -39,9 +39,9 @@ async function execute(emitter: EventEmitter, opts: Opts, dirs: Dirs) {
mkdirp.sync(`${dirs.dest}/client`);
copy_shimport(dirs.dest);
// minify app/template.html
// minify src/template.html
// TODO compile this to a function? could be quicker than str.replace(...).replace(...).replace(...)
const template = fs.readFileSync(`${dirs.app}/template.html`, 'utf-8');
const template = fs.readFileSync(`${dirs.src}/template.html`, 'utf-8');
// remove this in a future version
if (template.indexOf('%sapper.base%') === -1) {
@@ -54,7 +54,7 @@ async function execute(emitter: EventEmitter, opts: Opts, dirs: Dirs) {
const manifest_data = create_manifest_data();
// create app/manifest/client.js and app/manifest/server.js
// create src/manifest/client.js and src/manifest/server.js
create_main_manifests({ bundler: opts.bundler, manifest_data });
const { client, server, serviceworker } = create_compilers(opts.bundler, dirs);
@@ -79,7 +79,7 @@ async function execute(emitter: EventEmitter, opts: Opts, dirs: Dirs) {
// TODO duration/warnings
result: client_result
});
client_result.to_json(manifest_data, dirs);
build_info.legacy_assets = client_result.assets;
delete process.env.SAPPER_LEGACY_BUILD;

View File

@@ -23,7 +23,7 @@ export function dev(opts) {
class Watcher extends EventEmitter {
bundler: string;
dirs: {
app: string;
src: string;
dest: string;
routes: string;
rollup: string;
@@ -53,7 +53,7 @@ class Watcher extends EventEmitter {
}
constructor({
app = locations.app(),
src = locations.src(),
dest = locations.dest(),
routes = locations.routes(),
'dev-port': dev_port,
@@ -65,7 +65,7 @@ class Watcher extends EventEmitter {
rollup = 'rollup',
port = +process.env.PORT
}: {
app: string,
src: string,
dest: string,
routes: string,
'dev-port': number,
@@ -80,7 +80,7 @@ class Watcher extends EventEmitter {
super();
this.bundler = validate_bundler(bundler);
this.dirs = { app, dest, routes, webpack, rollup };
this.dirs = { src, dest, routes, webpack, rollup };
this.port = port;
this.closed = false;
@@ -100,7 +100,7 @@ class Watcher extends EventEmitter {
};
// remove this in a future version
const template = fs.readFileSync(path.join(app, 'template.html'), 'utf-8');
const template = fs.readFileSync(path.join(src, 'template.html'), 'utf-8');
if (template.indexOf('%sapper.base%') === -1) {
const error = new Error(`As of Sapper v0.10, your template.html file must include %sapper.base% in the <head>`);
error.code = `missing-sapper-base`;
@@ -175,7 +175,7 @@ class Watcher extends EventEmitter {
}
),
fs.watch(`${locations.app()}/template.html`, () => {
fs.watch(`${locations.src()}/template.html`, () => {
this.dev_server.send({
action: 'reload'
});

View File

@@ -13,6 +13,7 @@ import * as events from './interfaces';
type Opts = {
build: string,
dest: string,
static: string,
basepath?: string,
timeout: number | false
};
@@ -46,7 +47,7 @@ async function execute(emitter: EventEmitter, opts: Opts) {
// Prep output directory
sander.rimrafSync(export_dir);
sander.copydirSync('assets').to(export_dir);
sander.copydirSync(opts.static).to(export_dir);
sander.copydirSync(opts.build, 'client').to(export_dir, 'client');
if (sander.existsSync(opts.build, 'service-worker.js')) {

View File

@@ -18,7 +18,7 @@ export function build(opts: { bundler?: string, legacy?: boolean }) {
bundler
}, {
dest: locations.dest(),
app: locations.app(),
src: locations.src(),
routes: locations.routes(),
webpack: 'webpack',
rollup: 'rollup'

View File

@@ -15,6 +15,7 @@ export function exporter(export_dir: string, {
try {
const emitter = _exporter({
build: locations.dest(),
static: locations.static(),
dest: export_dir,
basepath,
timeout

View File

@@ -4,7 +4,8 @@ export const dev = () => process.env.NODE_ENV !== 'production';
export const locations = {
base: () => path.resolve(process.env.SAPPER_BASE || ''),
app: () => path.resolve(process.env.SAPPER_BASE || '', process.env.SAPPER_APP || 'app'),
routes: () => path.resolve(process.env.SAPPER_BASE || '', process.env.SAPPER_ROUTES || 'routes'),
src: () => path.resolve(process.env.SAPPER_BASE || '', process.env.SAPPER_SRC || 'src'),
static: () => path.resolve(process.env.SAPPER_BASE || '', process.env.SAPPER_STATIC || 'static'),
routes: () => path.resolve(process.env.SAPPER_BASE || '', process.env.SAPPER_ROUTES || 'src/routes'),
dest: () => path.resolve(process.env.SAPPER_BASE || '', process.env.SAPPER_DEST || `.sapper/${dev() ? 'dev' : 'prod'}`)
};

View File

@@ -10,7 +10,7 @@ export function create_main_manifests({ bundler, manifest_data, dev_port }: {
manifest_data: ManifestData;
dev_port?: number;
}) {
const manifest_dir = path.join(locations.app(), 'manifest');
const manifest_dir = path.join(locations.src(), 'manifest');
if (!fs.existsSync(manifest_dir)) fs.mkdirSync(manifest_dir);
const path_to_routes = path.relative(manifest_dir, locations.routes());
@@ -30,20 +30,21 @@ export function create_serviceworker_manifest({ manifest_data, client_files }: {
manifest_data: ManifestData;
client_files: string[];
}) {
const assets = glob('**', { cwd: 'assets', filesOnly: true });
const files = glob('**', { cwd: locations.static(), filesOnly: true });
let code = `
// This file is generated by Sapper — do not edit it!
export const timestamp = ${Date.now()};
export const assets = [\n\t${assets.map((x: string) => `"${x}"`).join(',\n\t')}\n];
export const files = [\n\t${files.map((x: string) => `"${x}"`).join(',\n\t')}\n];
export { files as assets }; // legacy
export const shell = [\n\t${client_files.map((x: string) => `"${x}"`).join(',\n\t')}\n];
export const routes = [\n\t${manifest_data.pages.map((r: Page) => `{ pattern: ${r.pattern} }`).join(',\n\t')}\n];
`.replace(/^\t\t/gm, '').trim();
write_if_changed(`${locations.app()}/manifest/service-worker.js`, code);
write_if_changed(`${locations.src()}/manifest/service-worker.js`, code);
}
function generate_client(

View File

@@ -43,7 +43,7 @@ export type ServerRoute = {
export type Dirs = {
dest: string,
app: string,
src: string,
routes: string,
webpack: string,
rollup: string

View File

@@ -288,7 +288,7 @@ function get_page_handler(
: (assets => () => assets)(JSON.parse(fs.readFileSync(path.join(output, 'build.json'), 'utf-8')));
const template = dev()
? () => fs.readFileSync(`${locations.app()}/template.html`, 'utf-8')
? () => fs.readFileSync(`${locations.src()}/template.html`, 'utf-8')
: (str => () => str)(fs.readFileSync(`${locations.dest()}/template.html`, 'utf-8'));
const { server_routes, pages } = manifest;

View File

@@ -5,7 +5,7 @@ export default {
client: {
input: () => {
return `${locations.app()}/client.js`
return `${locations.src()}/client.js`
},
output: () => {
@@ -24,7 +24,7 @@ export default {
server: {
input: () => {
return `${locations.app()}/server.js`
return `${locations.src()}/server.js`
},
output: () => {
@@ -38,7 +38,7 @@ export default {
serviceworker: {
input: () => {
return `${locations.app()}/service-worker.js`;
return `${locations.src()}/service-worker.js`;
},
output: () => {

View File

@@ -6,7 +6,7 @@ export default {
client: {
entry: () => {
return {
main: `${locations.app()}/client`
main: `${locations.src()}/client`
};
},
@@ -23,7 +23,7 @@ export default {
server: {
entry: () => {
return {
server: `${locations.app()}/server`
server: `${locations.src()}/server`
};
},
@@ -40,7 +40,7 @@ export default {
serviceworker: {
entry: () => {
return {
'service-worker': `${locations.app()}/service-worker`
'service-worker': `${locations.src()}/service-worker`
};
},