Compare commits

...

12 Commits

Author SHA1 Message Date
Rich Harris
7188ce0d0d -> v0.6.4 2018-02-06 10:51:24 -05:00
Rich Harris
4f8ce19fe1 Merge pull request #114 from lukeed/fix/prod-hmr
Fix: Remove HMR attempts in Prod~!
2018-02-06 10:39:19 -05:00
Rich Harris
a85f2921e8 Merge pull request #113 from lukeed/feat/map-config
Consolidate Rollup config file
2018-02-06 10:37:34 -05:00
Luke Edwards
7a2ed16884 fix HMR attempts in production 2018-02-05 14:09:24 -08:00
Luke Edwards
08e575fee0 shrink repetitive rollup.config file 2018-02-05 13:43:10 -08:00
Rich Harris
7dbcab74d3 remove logging 2018-02-03 16:35:10 -05:00
Rich Harris
9b1b545194 -> v0.6.3 2018-02-03 16:26:53 -05:00
Rich Harris
7b01242f3e always build in prod mode 2018-02-03 16:26:47 -05:00
Rich Harris
15b1fbf8a6 ignore non-html responses when crawling, and close middleware when done 2018-02-03 16:17:28 -05:00
Rich Harris
8f1d2e0a04 -> v0.6.2 2018-02-03 13:56:38 -05:00
Rich Harris
dfb8692d78 handle unspecified type in sapper export 2018-02-03 13:56:14 -05:00
Rich Harris
09d3c4d85e add prepublish script 2018-02-03 13:49:21 -05:00
8 changed files with 69 additions and 111 deletions

View File

@@ -1,5 +1,18 @@
# sapper changelog
## 0.6.4
* Prevent phantom HMR requests in production mode ([#114](https://github.com/sveltejs/sapper/pull/114))
## 0.6.3
* Ignore non-HTML responses when crawling during `export`
* Build in prod mode for `export`
## 0.6.2
* Handle unspecified type in `sapper export`
## 0.6.1
* Fix `pkg.files` and `pkg.bin`

View File

@@ -1,6 +1,6 @@
{
"name": "sapper",
"version": "0.6.1",
"version": "0.6.4",
"description": "Military-grade apps, engineered by Svelte",
"main": "middleware.js",
"bin": {
@@ -66,7 +66,8 @@
"test": "mocha --opts mocha.opts",
"pretest": "npm run build",
"build": "rollup -c",
"dev": "rollup -cw"
"dev": "rollup -cw",
"prepublish": "npm test"
},
"repository": "https://github.com/sveltejs/sapper",
"keywords": [

View File

@@ -11,91 +11,27 @@ const paths = {
'sapper/core.js': './core.js'
};
const plugins = [
typescript({
typescript: require('typescript')
})
];
export default [
// cli.js
{
input: 'src/cli/index.ts',
output: {
file: 'cli.js',
format: 'cjs',
banner: '#!/usr/bin/env node',
paths,
sourcemap: true
},
external,
plugins: [
typescript({
typescript: require('typescript')
})
]
{ name: 'cli', banner: true },
{ name: 'core', banner: true },
{ name: 'middleware' },
{ name: 'runtime', format: 'es' },
{ name: 'webpack', file: 'webpack/config' }
].map(obj => ({
input: `src/${obj.name}/index.ts`,
output: {
file: `${obj.file || obj.name}.js`,
format: obj.format || 'cjs',
banner: obj.banner && '#!/usr/bin/env node',
paths,
sourcemap: true
},
// core.js
{
input: 'src/core/index.ts',
output: {
file: 'core.js',
format: 'cjs',
banner: '#!/usr/bin/env node',
paths,
sourcemap: true
},
external,
plugins: [
typescript({
typescript: require('typescript')
})
]
},
// middleware.js
{
input: 'src/middleware/index.ts',
output: {
file: 'middleware.js',
format: 'cjs',
paths,
sourcemap: true
},
external,
plugins: [
typescript({
typescript: require('typescript')
})
]
},
// runtime.js
{
input: 'src/runtime/index.ts',
output: {
file: 'runtime.js',
format: 'es',
paths,
sourcemap: true
},
external,
plugins: [
typescript({
typescript: require('typescript')
})
]
},
// webpack/config.js
{
input: 'src/webpack/index.ts',
output: {
file: 'webpack/config.js',
format: 'cjs',
paths,
sourcemap: true
},
external,
plugins: [
typescript({
typescript: require('typescript')
})
]
}
];
external,
plugins
}));

View File

@@ -1,8 +1,11 @@
import { build, export as exporter } from 'sapper/core.js';
import { dest, dev, entry, src } from '../config';
import { dest, entry, isDev, src } from '../config';
process.env.NODE_ENV = 'production';
const cmd = process.argv[2];
const start = Date.now();
const dev = isDev();
if (cmd === 'build') {
build({ dest, dev, entry, src })
@@ -14,9 +17,7 @@ if (cmd === 'build') {
console.error(err ? err.details || err.stack || err.message || err : 'Unknown error');
});
} else if (cmd === 'export') {
const start = Date.now();
build({ dest, dev, entry, src })
build({ dest, dev: false, entry, src })
.then(() => exporter({ src, dest }))
.then(() => {
const elapsed = Date.now() - start;

View File

@@ -1,6 +1,6 @@
import * as path from 'path';
export const dev = process.env.NODE_ENV !== 'production';
export const isDev = () => process.env.NODE_ENV !== 'production';
export const templates = path.resolve(process.env.SAPPER_TEMPLATES || 'templates');
export const src = path.resolve(process.env.SAPPER_ROUTES || 'routes');
@@ -9,4 +9,4 @@ export const dest = path.resolve(process.env.SAPPER_DEST || '.sapper');
export const entry = {
client: path.resolve(templates, '.main.rendered.js'),
server: path.resolve(dest, 'server-entry.js')
};
};

View File

@@ -41,7 +41,7 @@ export default function exporter({ src, dest }) { // TODO dest is a terrible nam
let dest = OUTPUT_DIR + pathname;
const type = res.headers.get('Content-Type');
if (type.startsWith('text/html')) dest += '/index.html';
if (type && type.startsWith('text/html')) dest += '/index.html';
sander.writeFileSync(dest, body);
@@ -63,7 +63,8 @@ export default function exporter({ src, dest }) { // TODO dest is a terrible nam
return fetch(url, opts);
};
app.use(require('./middleware')()); // TODO this is filthy
const middleware = require('./middleware')({ dev: false }); // TODO this is filthy
app.use(middleware);
const server = app.listen(PORT);
const seen = new Set();
@@ -77,19 +78,21 @@ export default function exporter({ src, dest }) { // TODO dest is a terrible nam
return fetch(url.href)
.then(r => {
save(r);
return r.text();
})
.then(body => {
const $ = cheerio.load(body);
const hrefs = [];
$('a[href]').each((i, $a) => {
hrefs.push($a.attribs.href);
});
if (r.headers.get('Content-Type') === 'text/html') {
return r.text().then(body => {
const $ = cheerio.load(body);
const hrefs = [];
return hrefs.reduce((promise, href) => {
return promise.then(() => handle(new URL(href, url.href)));
}, Promise.resolve());
$('a[href]').each((i, $a) => {
hrefs.push($a.attribs.href);
});
return hrefs.reduce((promise, href) => {
return promise.then(() => handle(new URL(href, url.href)));
}, Promise.resolve());
});
}
})
.catch(err => {
console.error(`Error rendering ${url.pathname}: ${err.message}`);

View File

@@ -5,8 +5,10 @@ import rimraf from 'rimraf';
import serialize from 'serialize-javascript';
import escape_html from 'escape-html';
import { create_routes, templates, create_compilers, create_assets } from 'sapper/core.js';
import { dest, entry, isDev, src } from '../config';
import create_watcher from './create_watcher';
import { dest, dev, entry, src } from '../config';
const dev = isDev();
function connect_dev() {
mkdirp.sync(dest);
@@ -122,7 +124,9 @@ function connect_prod() {
return middleware;
}
export default dev ? connect_dev : connect_prod;
export default function connect({ dev: _dev = dev } = {}) {
return _dev ? connect_dev() : connect_prod();
}
function set_req_pathname(req, res, next) {
req.pathname = req.url.replace(/\?.*/, '');

View File

@@ -1,7 +1,7 @@
import { dest, dev, entry } from '../config';
import { dest, isDev, entry } from '../config';
export default {
dev,
dev: isDev(),
client: {
entry: () => {