Skip to content

Commit 2798df5

Browse files
arunodarauchg
authored andcommittedDec 21, 2016
Create a babel-preset for plugins and presets we use. (vercel#445)
* Create a babel-preset for plugins and presets we use. Anyone could get it via 'next/babel' * Remove 'use strict' from the source. * Add next/router to alias resolver in our babel preset.
1 parent e839a0f commit 2798df5

File tree

5 files changed

+76
-89
lines changed

5 files changed

+76
-89
lines changed
 

‎babel.js

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
module.exports = require('./dist/server/build/babel/preset')

‎server/build/babel.js

-62
This file was deleted.

‎server/build/babel/index.js

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import { resolve, join, dirname } from 'path'
2+
import { readFile, writeFile } from 'mz/fs'
3+
import { transform } from 'babel-core'
4+
import chokidar from 'chokidar'
5+
import mkdirp from 'mkdirp-then'
6+
7+
export default babel
8+
9+
async function babel (dir, { dev = false } = {}) {
10+
dir = resolve(dir)
11+
12+
let src
13+
try {
14+
src = await readFile(join(dir, 'pages', '_document.js'), 'utf8')
15+
} catch (err) {
16+
if (err.code === 'ENOENT') {
17+
src = await readFile(join(__dirname, '..', '..', '..', 'pages', '_document.js'), 'utf8')
18+
} else {
19+
throw err
20+
}
21+
}
22+
23+
const { code } = transform(src, {
24+
babelrc: false,
25+
sourceMaps: dev ? 'inline' : false,
26+
presets: [require.resolve('./preset')]
27+
})
28+
29+
const file = join(dir, '.next', 'dist', 'pages', '_document.js')
30+
await mkdirp(dirname(file))
31+
await writeFile(file, code)
32+
}
33+
34+
export function watch (dir) {
35+
return chokidar.watch('pages/_document.js', {
36+
cwd: dir,
37+
ignoreInitial: true
38+
})
39+
}

‎server/build/babel/preset.js

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
const babelRuntimePath = require.resolve('babel-runtime/package')
2+
.replace(/[\\/]package\.json$/, '')
3+
4+
module.exports = {
5+
presets: [
6+
require.resolve('babel-preset-es2015'),
7+
require.resolve('babel-preset-react')
8+
],
9+
plugins: [
10+
require.resolve('babel-plugin-react-require'),
11+
require.resolve('babel-plugin-transform-async-to-generator'),
12+
require.resolve('babel-plugin-transform-object-rest-spread'),
13+
require.resolve('babel-plugin-transform-class-properties'),
14+
require.resolve('babel-plugin-transform-runtime'),
15+
require.resolve('styled-jsx/babel'),
16+
[
17+
require.resolve('babel-plugin-module-resolver'),
18+
{
19+
alias: {
20+
'babel-runtime': babelRuntimePath,
21+
react: require.resolve('react'),
22+
'react-dom': require.resolve('react-dom'),
23+
'next/link': require.resolve('../../../lib/link'),
24+
'next/prefetch': require.resolve('../../../lib/prefetch'),
25+
'next/css': require.resolve('../../../lib/css'),
26+
'next/head': require.resolve('../../../lib/head'),
27+
'next/document': require.resolve('../../../server/document'),
28+
'next/router': require.resolve('../../../server/router'),
29+
'styled-jsx/style': require.resolve('styled-jsx/style')
30+
}
31+
}
32+
]
33+
]
34+
}

‎server/build/webpack.js

+2-27
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,6 @@ export default async function createCompiler (dir, { dev = false } = {}) {
8181
)
8282
}
8383

84-
const babelRuntimePath = require.resolve('babel-runtime/package')
85-
.replace(/[\\/]package\.json$/, '')
86-
8784
const loaders = (dev ? [{
8885
test: /\.js(\?[^?]*)?$/,
8986
loader: 'hot-self-accept-loader',
@@ -137,30 +134,8 @@ export default async function createCompiler (dir, { dev = false } = {}) {
137134
query: {
138135
babelrc: false,
139136
sourceMaps: dev ? 'both' : false,
140-
presets: ['es2015', 'react'],
141-
plugins: [
142-
require.resolve('babel-plugin-react-require'),
143-
require.resolve('babel-plugin-transform-async-to-generator'),
144-
require.resolve('babel-plugin-transform-object-rest-spread'),
145-
require.resolve('babel-plugin-transform-class-properties'),
146-
require.resolve('babel-plugin-transform-runtime'),
147-
require.resolve('styled-jsx/babel'),
148-
[
149-
require.resolve('babel-plugin-module-resolver'),
150-
{
151-
alias: {
152-
'babel-runtime': babelRuntimePath,
153-
react: require.resolve('react'),
154-
'react-dom': require.resolve('react-dom'),
155-
'next/link': require.resolve('../../lib/link'),
156-
'next/prefetch': require.resolve('../../lib/prefetch'),
157-
'next/css': require.resolve('../../lib/css'),
158-
'next/head': require.resolve('../../lib/head'),
159-
'next/document': require.resolve('../../server/document'),
160-
'styled-jsx/style': require.resolve('styled-jsx/style')
161-
}
162-
}
163-
]
137+
presets: [
138+
require.resolve('./babel/preset')
164139
]
165140
}
166141
}])

0 commit comments

Comments
 (0)
Please sign in to comment.