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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy