Skip to content
This repository has been archived by the owner on Jan 11, 2023. It is now read-only.

replace magic env vars with documented CLI flags #469

Merged
merged 1 commit into from
Oct 9, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 15 additions & 7 deletions src/api/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,26 +16,34 @@ type Opts = {
routes?: string;
dest?: string;
output?: string;
static_files?: string;
static?: string;
legacy?: boolean;
bundler?: 'rollup' | 'webpack';
oncompile?: ({ type, result }: { type: string, result: CompileResult }) => void;
};

export async function build({
cwd = process.cwd(),
src = path.join(cwd, 'src'),
routes = path.join(cwd, 'src/routes'),
output = path.join(cwd, '__sapper__'),
static_files = path.join(cwd, 'static'),
dest = path.join(cwd, '__sapper__/build'),
cwd,
src = 'src',
routes = 'src/routes',
output = '__sapper__',
static: static_files = 'static',
dest = '__sapper__/build',

bundler,
legacy = false,
oncompile = noop
}: Opts = {}) {
bundler = validate_bundler(bundler);

cwd = path.resolve(cwd);
src = path.resolve(cwd, src);
dest = path.resolve(cwd, dest);
routes = path.resolve(cwd, routes);
output = path.resolve(cwd, output);
static_files = path.resolve(cwd, static_files);
dest = path.resolve(cwd, dest);

if (legacy && bundler === 'webpack') {
throw new Error(`Legacy builds are not supported for projects using webpack`);
}
Expand Down
30 changes: 20 additions & 10 deletions src/api/dev.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ type Opts = {
dest?: string,
routes?: string,
output?: string,
static_files?: string,
static?: string,
'dev-port'?: number,
live?: boolean,
hot?: boolean,
Expand All @@ -43,7 +43,7 @@ class Watcher extends EventEmitter {
dest: string;
routes: string;
output: string;
static_files: string;
static: string;
}
port: number;
closed: boolean;
Expand All @@ -69,12 +69,12 @@ class Watcher extends EventEmitter {
}

constructor({
cwd = process.cwd(),
src = path.join(cwd, 'src'),
routes = path.join(cwd, 'src/routes'),
output = path.join(cwd, '__sapper__'),
static_files = path.join(cwd, 'static'),
dest = path.join(cwd, '__sapper__/dev'),
cwd = '.',
src = 'src',
routes = 'src/routes',
output = '__sapper__',
static: static_files = 'static',
dest = '__sapper__/dev',
'dev-port': dev_port,
live,
hot,
Expand All @@ -84,8 +84,18 @@ class Watcher extends EventEmitter {
}: Opts) {
super();

cwd = path.resolve(cwd);

this.bundler = validate_bundler(bundler);
this.dirs = { cwd, src, dest, routes, output, static_files };
this.dirs = {
cwd,
src: path.resolve(cwd, src),
dest: path.resolve(cwd, dest),
routes: path.resolve(cwd, routes),
output: path.resolve(cwd, output),
static: path.resolve(cwd, static_files)
};

this.port = port;
this.closed = false;

Expand Down Expand Up @@ -133,7 +143,7 @@ class Watcher extends EventEmitter {
this.port = await ports.find(3000);
}

const { cwd, src, dest, routes, output, static_files } = this.dirs;
const { cwd, src, dest, routes, output, static: static_files } = this.dirs;
rimraf.sync(dest);
mkdirp.sync(`${dest}/client`);
if (this.bundler === 'rollup') copy_shimport(dest);
Expand Down
13 changes: 9 additions & 4 deletions src/api/export.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,20 @@ type URL = url.UrlWithStringQuery;
export { _export as export };

async function _export({
cwd = process.cwd(),
static: static_files = path.join(cwd, 'static'),
build_dir = path.join(cwd, '__sapper__/build'),
cwd,
static: static_files = 'static',
build_dir = '__sapper__/build',
export_dir = '__sapper__/export',
basepath = '',
export_dir = path.join(cwd, '__sapper__/export', basepath),
timeout = 5000,
oninfo = noop,
onfile = noop
}: Opts = {}) {
cwd = path.resolve(cwd);
static_files = path.resolve(cwd, static_files);
build_dir = path.resolve(cwd, build_dir);
export_dir = path.resolve(cwd, export_dir, basepath);

// Prep output directory
sander.rimrafSync(export_dir);

Expand Down
69 changes: 51 additions & 18 deletions src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,21 +25,36 @@ prog.command('dev')
.option('--hot', 'Use hot module replacement (requires webpack)', true)
.option('--live', 'Reload on changes if not using --hot', true)
.option('--bundler', 'Specify a bundler (rollup or webpack)')
.option('--cwd', 'Current working directory', '.')
.option('--src', 'Source directory', 'src')
.option('--routes', 'Routes directory', 'src/routes')
.option('--static', 'Static files directory', 'static')
.option('--output', 'Sapper output directory', '__sapper__')
.option('--build-dir', 'Development build directory', '__sapper__/dev')
.action(async (opts: {
port: number,
open: boolean,
'dev-port': number,
live: boolean,
hot: boolean,
bundler?: 'rollup' | 'webpack'
bundler?: 'rollup' | 'webpack',
cwd: string,
src: string,
routes: string,
static: string,
output: string,
'build-dir': string
}) => {
const cwd = path.resolve(process.env.SAPPER_BASE || '');

const { dev } = await import('./api/dev');

try {
const watcher = dev({
cwd,
cwd: opts.cwd,
src: opts.src,
routes: opts.routes,
static: opts.static,
output: opts.output,
dest: opts['build-dir'],
port: opts.port,
'dev-port': opts['dev-port'],
live: opts.live,
Expand Down Expand Up @@ -125,18 +140,24 @@ prog.command('build [dest]')
.option('-p, --port', 'Default of process.env.PORT', '3000')
.option('--bundler', 'Specify a bundler (rollup or webpack, blank for auto)')
.option('--legacy', 'Create separate legacy build')
.option('--cwd', 'Current working directory', '.')
.option('--src', 'Source directory', 'src')
.option('--routes', 'Routes directory', 'src/routes')
.option('--output', 'Sapper output directory', '__sapper__')
.example(`build custom-dir -p 4567`)
.action(async (dest = '__sapper__/build', opts: {
port: string,
legacy: boolean,
bundler?: 'rollup' | 'webpack'
bundler?: 'rollup' | 'webpack',
cwd: string,
src: string,
routes: string,
output: string
}) => {
console.log(`> Building...`);

const cwd = path.resolve(process.env.SAPPER_BASE || '');

try {
await _build(opts.bundler, opts.legacy, cwd, dest);
await _build(opts.bundler, opts.legacy, opts.cwd, opts.src, opts.routes, opts.output, dest);

const launcher = path.resolve(dest, 'index.js');

Expand All @@ -159,33 +180,42 @@ prog.command('build [dest]')
prog.command('export [dest]')
.describe('Export your app as static files (if possible)')
.option('--build', '(Re)build app before exporting', true)
.option('--build-dir', 'Specify a custom temporary build directory', '__sapper__/build')
.option('--basepath', 'Specify a base path')
.option('--timeout', 'Milliseconds to wait for a page (--no-timeout to disable)', 5000)
.option('--legacy', 'Create separate legacy build')
.option('--bundler', 'Specify a bundler (rollup or webpack, blank for auto)')
.option('--cwd', 'Current working directory', '.')
.option('--src', 'Source directory', 'src')
.option('--routes', 'Routes directory', 'src/routes')
.option('--static', 'Static files directory', 'static')
.option('--output', 'Sapper output directory', '__sapper__')
.option('--build-dir', 'Intermediate build directory', '__sapper__/build')
.action(async (dest = '__sapper__/export', opts: {
build: boolean,
legacy: boolean,
bundler?: 'rollup' | 'webpack',
'build-dir': string,
basepath?: string,
timeout: number | false
timeout: number | false,
cwd: string,
src: string,
routes: string,
static: string,
output: string,
'build-dir': string,
}) => {
const cwd = path.resolve(process.env.SAPPER_BASE || '');

try {
if (opts.build) {
console.log(`> Building...`);
await _build(opts.bundler, opts.legacy, cwd, opts['build-dir']);
await _build(opts.bundler, opts.legacy, opts.cwd, opts.src, opts.routes, opts.output, opts['build-dir']);
console.error(`\n> Built in ${elapsed(start)}`);
}

const { export: _export } = await import('./api/export');
const { default: pb } = await import('pretty-bytes');

await _export({
static: path.resolve(cwd, process.env.SAPPER_STATIC || 'static'),
cwd: opts.cwd,
static: opts.static,
build_dir: opts['build-dir'],
export_dir: dest,
basepath: opts.basepath,
Expand Down Expand Up @@ -221,6 +251,9 @@ async function _build(
bundler: 'rollup' | 'webpack',
legacy: boolean,
cwd: string,
src: string,
routes: string,
output: string,
dest: string
) {
const { build } = await import('./api/build');
Expand All @@ -229,9 +262,9 @@ async function _build(
bundler,
legacy,
cwd,
src: path.resolve(cwd, process.env.SAPPER_SRC || 'src'),
routes: path.resolve(cwd, process.env.SAPPER_ROUTES || 'src/routes'),
dest: path.resolve(cwd, dest),
src,
routes,
dest,

oncompile: event => {
let banner = `built ${event.type}`;
Expand Down