Skip to content

Commit 88b01e0

Browse files
committed
next-dev
1 parent e51c7ea commit 88b01e0

File tree

12 files changed

+171
-137
lines changed

12 files changed

+171
-137
lines changed

bin/next-build

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
#!/usr/bin/env node
22

3-
import { resolve, dirname } from 'path'
3+
import { resolve } from 'path'
44
import parseArgs from 'minimist'
5-
import fs from 'mz/fs'
6-
import mkdirp from 'mkdirp-then';
7-
import glob from 'glob-promise'
8-
import { transpile, bundle } from '../server/build'
5+
import build from '../server/build'
96

107
const argv = parseArgs(process.argv.slice(2), {
118
alias: {
@@ -16,29 +13,8 @@ const argv = parseArgs(process.argv.slice(2), {
1613

1714
const dir = resolve(argv._[0] || '.')
1815

19-
Promise.resolve()
20-
.then(async () => {
21-
const paths = await glob('**/*.js', { cwd: dir, ignore: 'node_modules/**' })
22-
await Promise.all(paths.map(async (p) => {
23-
const code = await transpile(resolve(dir, p))
24-
const outpath = resolve(dir, '.next', p)
25-
await writeFile(outpath, code)
26-
}))
27-
28-
const pagePaths = await glob('.next/pages/**/*.js', { cwd: dir })
29-
await Promise.all(pagePaths.map(async (p) => {
30-
const code = await bundle(resolve(dir, p))
31-
const outpath = resolve(dir, '.next', p)
32-
await writeFile(outpath, code)
33-
}))
34-
})
16+
build(dir)
3517
.catch((err) => {
3618
console.error(err)
3719
exit(1)
3820
})
39-
40-
async function writeFile (path, data) {
41-
await mkdirp(dirname(path))
42-
await fs.writeFile(path, data, { encoding: 'utf8', flag: 'w+' })
43-
}
44-

bin/next-dev

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
#!/usr/bin/env node
2+
3+
import { resolve } from 'path'
4+
import parseArgs from 'minimist'
5+
import Server from '../server'
6+
import build from '../server/build'
7+
8+
const argv = parseArgs(process.argv.slice(2), {
9+
alias: {
10+
h: 'help',
11+
p: 'port'
12+
},
13+
boolean: ['h'],
14+
default: {
15+
p: 3000
16+
}
17+
})
18+
19+
const dir = resolve(argv._[0] || '.')
20+
21+
build(dir)
22+
.then(async () => {
23+
const srv = new Server({ dir, dev: true })
24+
await srv.start(argv.port)
25+
console.log('> Ready on http://localhost:%d', argv.port);
26+
})
27+
.catch((err) => {
28+
console.error(err)
29+
exit(1)
30+
})

bin/next-start

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#!/usr/bin/env node
22

3+
import { resolve } from 'path'
34
import parseArgs from 'minimist'
45
import Server from '../server'
56

@@ -14,9 +15,9 @@ const argv = parseArgs(process.argv.slice(2), {
1415
}
1516
})
1617

17-
const dir = argv._[0] || '.'
18+
const dir = resolve(argv._[0] || '.')
1819

19-
const srv = new Server(dir)
20+
const srv = new Server({ dir })
2021
srv.start(argv.port)
2122
.then(() => {
2223
console.log('> Ready on http://localhost:%d', argv.port);

client/next-dev.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
import './next'

lib/document.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ export function DevTools (props, context) {
5454
DevTools.contextTypes = { _documentProps: PropTypes.any }
5555

5656
export function NextScript (props, context) {
57-
const { hotReload } = context._documentProps;
58-
const src = !hotReload ? '/_next/next.bundle.js' : '/_next/next-dev.bundle.js'
57+
const { dev } = context._documentProps;
58+
const src = !dev ? '/_next/next.bundle.js' : '/_next/next-dev.bundle.js'
5959
return <script type='text/javascript' src={src}/>
6060
}
6161

package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
"cross-spawn": "4.0.2",
3030
"glob-promise": "1.0.6",
3131
"htmlescape": "1.1.1",
32-
"memory-fs": "0.3.0",
3332
"minimist": "1.2.0",
3433
"mkdirp-then": "1.2.0",
3534
"mz": "2.4.0",

server/build.js

Lines changed: 0 additions & 93 deletions
This file was deleted.

server/build/bundle.js

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
import { resolve, dirname, basename } from 'path'
2+
import webpack from 'webpack'
3+
4+
export default function bundle (src, dst) {
5+
const compiler = webpack({
6+
entry: src,
7+
output: {
8+
path: dirname(dst),
9+
filename: basename(dst),
10+
libraryTarget: 'commonjs2'
11+
},
12+
externals: [
13+
'react',
14+
'react-dom',
15+
{
16+
[require.resolve('react')]: 'react',
17+
[require.resolve('../lib/link')]: 'next/link'
18+
}
19+
],
20+
resolveLoader: {
21+
root: resolve(__dirname, '..', '..', 'node_modules')
22+
},
23+
plugins: [
24+
new webpack.optimize.UglifyJsPlugin({
25+
compress: { warnings: false },
26+
sourceMap: false
27+
})
28+
],
29+
module: {
30+
preLoaders: [
31+
{ test: /\.json$/, loader: 'json-loader' }
32+
]
33+
}
34+
})
35+
36+
return new Promise((resolve, reject) => {
37+
compiler.run((err, stats) => {
38+
if (err) return reject(err)
39+
40+
const jsonStats = stats.toJson()
41+
if (jsonStats.errors.length > 0) {
42+
const error = new Error(jsonStats.errors[0])
43+
error.errors = jsonStats.errors
44+
error.warnings = jsonStats.warnings
45+
return reject(error)
46+
}
47+
48+
resolve()
49+
})
50+
})
51+
}

server/build/index.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { resolve } from 'path'
2+
import glob from 'glob-promise'
3+
import transpile from './transpile'
4+
import bundle from './bundle'
5+
6+
export default async function build (dir) {
7+
const dstDir = resolve(dir, '.next')
8+
9+
const paths = await glob('**/*.js', { cwd: dir, ignore: 'node_modules/**' })
10+
await Promise.all(paths.map(async (p) => {
11+
await transpile(resolve(dir, p), resolve(dstDir, p))
12+
}))
13+
14+
const pagePaths = await glob('pages/**/*.js', { cwd: dstDir })
15+
await Promise.all(pagePaths.map(async (p) => {
16+
await bundle(resolve(dstDir, p), resolve(dstDir, '_bundles', p))
17+
}))
18+
}

server/build/transpile.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { dirname } from 'path'
2+
import fs from 'mz/fs'
3+
import mkdirp from 'mkdirp-then';
4+
import { transformFile } from 'babel-core'
5+
import preset2015 from 'babel-preset-es2015'
6+
import presetReact from 'babel-preset-react'
7+
import transformAsyncToGenerator from 'babel-plugin-transform-async-to-generator'
8+
import transformClassProperties from 'babel-plugin-transform-class-properties'
9+
import transformObjectRestSpread from 'babel-plugin-transform-object-rest-spread'
10+
import transformRuntime from 'babel-plugin-transform-runtime'
11+
import moduleAlias from 'babel-plugin-module-alias'
12+
13+
const babelRuntimePath = require.resolve('babel-runtime/package')
14+
.replace(/[\\\/]package\.json$/, '');
15+
16+
const babelOptions = {
17+
presets: [preset2015, presetReact],
18+
plugins: [
19+
transformAsyncToGenerator,
20+
transformClassProperties,
21+
transformObjectRestSpread,
22+
transformRuntime,
23+
[
24+
moduleAlias,
25+
[
26+
{ src: `npm:${babelRuntimePath}`, expose: 'babel-runtime' },
27+
{ src: `npm:${require.resolve('react')}`, expose: 'react' },
28+
{ src: `npm:${require.resolve('../lib/link')}`, expose: 'next/link' }
29+
]
30+
]
31+
],
32+
ast: false
33+
}
34+
35+
export default async function transpile (src, dst) {
36+
const code = await new Promise((resolve, reject) => {
37+
transformFile(src, babelOptions, (err, result) => {
38+
if (err) return reject(err)
39+
resolve(result.code)
40+
})
41+
})
42+
43+
await writeFile(dst, code)
44+
}
45+
46+
async function writeFile (path, data) {
47+
await mkdirp(dirname(path))
48+
await fs.writeFile(path, data, { encoding: 'utf8', flag: 'w+' })
49+
}

0 commit comments

Comments
 (0)