Skip to content
This repository was archived by the owner on Feb 18, 2024. It is now read-only.

Commit d7617a7

Browse files
committed
Update to Babel 7
Notable changes: * All official packages have moved under the `@babel/` namespace and in some cases further renamed, so package names adjusted accordingly. * `@babel/preset-env` now includes `@babel/plugin-transform-spread` and `@babel/plugin-transform-classes`, which are the Babel 7 renames of `babel-plugin-transform-object-rest-spread` and `babel-plugin-transform-es2015-classes`. * `@babel/preset-env`'s `useBuiltIns: true` mode has been renamed to `useBuiltIns: 'entry'` - which is equivalent. * `@babel/preset-react` now has `development` and `useBuiltIns` options, which we set appropriately: https://github.com/babel/babel/tree/v7.0.0-beta.46/packages/babel-preset-react#options * `babel-plugin-dynamic-import-node` is no longer required by `@neutrinojs/library` for target `node`, since webpack converts the dynamic import to a require itself. * `@neutrinojs/jest` required more substantial changes since: - the custom transformer used the now removed `canCompile()` from Babel's API. - `babel-preset-jest` is not fully compatible with Babel 7 (jestjs/jest#6126). * Several packages now have a peer dependency on `@babel/core`, so it's been added where necessary. * `babel-loader` has been updated to v8 for Babel 7 compatibility. * `@neutrinojs/vue`'s `babel-preset-vue` dependency doesn't appear to be used, but has been left as is pending #836. Closes #316.
1 parent c725322 commit d7617a7

36 files changed

+825
-475
lines changed

docs/cli/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,8 @@ index 3356802..d4d82ef 100644
8888
devtool: 'source-map',
8989
entry: {
9090
index: [
91-
- 'babel-polyfill',
92-
'/node/src/index.js'
91+
- '/node/src/index.js'
92+
+ '/node/src/app.js'
9393
]
9494
},
9595
```

docs/packages/compile-loader/README.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ const { merge } = require('@neutrinojs/compile-loader');
8282
const together = merge(
8383
{
8484
presets: [
85-
['babel-preset-env', {
85+
['@babel/preset-env', {
8686
targets: {
8787
browsers: ['latest 1 Chrome']
8888
}
@@ -91,7 +91,7 @@ const together = merge(
9191
},
9292
{
9393
presets: [
94-
['babel-preset-env', {
94+
['@babel/preset-env', {
9595
targets: {
9696
browsers: ['latest 1 Firefox']
9797
}
@@ -105,7 +105,7 @@ console.log(together);
105105
// Logs:
106106
{
107107
presets: [
108-
['babel-preset-env', {
108+
['@babel/preset-env', {
109109
targets: {
110110
browsers: [
111111
'latest 1 Chrome',
@@ -139,8 +139,8 @@ config.module
139139
.use('babel')
140140
.tap(options => merge({
141141
plugins: [
142-
require.resolve('babel-plugin-transform-decorators-legacy'),
143-
require.resolve('babel-plugin-transform-class-properties')
142+
require.resolve('@babel/plugin-proposal-decorators'),
143+
require.resolve('@babel/plugin-proposal-class-properties')
144144
]
145145
}, options));
146146
```

docs/packages/library/README.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -252,10 +252,10 @@ module.exports = {
252252

253253
// Add additional Babel plugins, presets, or env options
254254
babel: {
255-
// Override options for babel-preset-env
255+
// Override options for @babel/preset-env
256256
presets: [
257-
['babel-preset-env', {
258-
// Passing in browser targets to babel-preset-env will replace them
257+
['@babel/preset-env', {
258+
// Passing in browser targets to @babel/preset-env will replace them
259259
// instead of merging them when using the 'web' target
260260
targets: {
261261
browsers: [
@@ -282,9 +282,9 @@ module.exports = {
282282
libraryTarget: 'commonjs2',
283283
// Add additional Babel plugins, presets, or env options
284284
babel: {
285-
// Override options for babel-preset-env
285+
// Override options for @babel/preset-env
286286
presets: [
287-
['babel-preset-env', {
287+
['@babel/preset-env', {
288288
targets: {
289289
node: '6.0'
290290
}

docs/packages/node/README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ module.exports = {
255255
// Enables Hot Module Replacement. Set to false to disable
256256
hot: true,
257257

258-
// Target specific versions via babel-preset-env
258+
// Target specific versions via @babel/preset-env
259259
targets: {
260260
node: '8.3'
261261
},
@@ -268,9 +268,9 @@ module.exports = {
268268

269269
// Add additional Babel plugins, presets, or env options
270270
babel: {
271-
// Override options for babel-preset-env, showing defaults:
271+
// Override options for @babel/preset-env, showing defaults:
272272
presets: [
273-
['babel-preset-env', {
273+
['@babel/preset-env', {
274274
targets: { node: '8.3' },
275275
modules: false,
276276
useBuiltIns: true,
@@ -288,7 +288,7 @@ _Example: Override the Node.js Babel compilation target to Node.js v6:_
288288
module.exports = {
289289
use: [
290290
['@neutrinojs/node', {
291-
// Target specific versions via babel-preset-env
291+
// Target specific versions via @babel/preset-env
292292
targets: {
293293
node: '6.0'
294294
}

docs/packages/preact/README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ module.exports = {
214214
title: 'Epic Preact App'
215215
},
216216

217-
// Target specific browsers with babel-preset-env
217+
// Target specific browsers with @babel/preset-env
218218
targets: {
219219
browsers: [
220220
'last 1 Chrome versions',
@@ -224,9 +224,9 @@ module.exports = {
224224

225225
// Add additional Babel plugins, presets, or env options
226226
babel: {
227-
// Override options for babel-preset-env:
227+
// Override options for @babel/preset-env:
228228
presets: [
229-
['babel-preset-env', {
229+
['@babel/preset-env', {
230230
modules: false,
231231
useBuiltIns: true,
232232
}]

docs/packages/react-components/README.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ other Neutrino middleware, so you can build, test, and publish multiple React co
2525
- Production-optimized bundles with minification, easy chunking, and scope-hoisted modules for faster execution
2626
- Easily extensible to customize your project as needed
2727

28-
**Important! This preset does not include babel-polyfill for size reasons. If you need
29-
polyfills in your library code, consider importing babel-polyfill, core-js, or other alternative.**
28+
**Important! This preset does not include @babel/polyfill for size reasons. If you need
29+
polyfills in your library code, consider importing @babel/polyfill, core-js, or other alternative.**
3030

3131
## Requirements
3232

docs/packages/react/README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ module.exports = {
203203
title: 'Epic React App'
204204
},
205205

206-
// Target specific browsers with babel-preset-env
206+
// Target specific browsers with @babel/preset-env
207207
targets: {
208208
browsers: [
209209
'last 1 Chrome versions',
@@ -213,9 +213,9 @@ module.exports = {
213213

214214
// Add additional Babel plugins, presets, or env options
215215
babel: {
216-
// Override options for babel-preset-env:
216+
// Override options for @babel/preset-env:
217217
presets: [
218-
['babel-preset-env', {
218+
['@babel/preset-env', {
219219
modules: false,
220220
useBuiltIns: true,
221221
}]

docs/packages/vue/README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ module.exports = {
219219
title: 'Epic Vue App'
220220
},
221221

222-
// Target specific browsers with babel-preset-env
222+
// Target specific browsers with @babel/preset-env
223223
targets: {
224224
browsers: [
225225
'last 1 Chrome versions',
@@ -229,9 +229,9 @@ module.exports = {
229229

230230
// Add additional Babel plugins, presets, or env options
231231
babel: {
232-
// Override options for babel-preset-env:
232+
// Override options for @babel/preset-env:
233233
presets: [
234-
['babel-preset-env', {
234+
['@babel/preset-env', {
235235
modules: false,
236236
useBuiltIns: true,
237237
}]

docs/packages/web/README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ module.exports = {
231231
proxy: 'https://localhost:8000/api/'
232232
},
233233

234-
// Target specific browsers with babel-preset-env
234+
// Target specific browsers with @babel/preset-env
235235
targets: {
236236
browsers: [
237237
'last 1 Chrome versions',
@@ -241,9 +241,9 @@ module.exports = {
241241

242242
// Add additional Babel plugins, presets, or env options
243243
babel: {
244-
// Override options for babel-preset-env:
244+
// Override options for @babel/preset-env:
245245
presets: [
246-
['babel-preset-env', {
246+
['@babel/preset-env', {
247247
modules: false,
248248
useBuiltIns: true,
249249
}]
@@ -277,7 +277,7 @@ module.exports = {
277277
source: false
278278
},
279279

280-
// Example: Use a .browserslistrc file with babel-env
280+
// Example: Use a .browserslistrc file with @babel/preset-env
281281
targets: {
282282
browsers: require('browserslist')()
283283
},

docs/presets/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ types, but anyone can inherit, extend, and modify these presets and tailor them
77
team, or company preferences. You can even create your own presets from scratch.
88

99
If you are familiar with Babel presets, Neutrino presets work similarly. For example,
10-
given the Babel preset `babel-preset-react`, you can compile React code with JSX
10+
given the Babel preset `@babel/preset-react`, you can compile React code with JSX
1111
to vanilla JavaScript calls. Neutrino adopts this same concept by adapting webpack into
1212
a tool that understands configurations-as-packages, i.e. presets. Many more aspects of
1313
development surround building a complete React project, for which webpack is commonly used.

packages/compile-loader/README.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ const { merge } = require('@neutrinojs/compile-loader');
8282
const together = merge(
8383
{
8484
presets: [
85-
['babel-preset-env', {
85+
['@babel/preset-env', {
8686
targets: {
8787
browsers: ['latest 1 Chrome']
8888
}
@@ -91,7 +91,7 @@ const together = merge(
9191
},
9292
{
9393
presets: [
94-
['babel-preset-env', {
94+
['@babel/preset-env', {
9595
targets: {
9696
browsers: ['latest 1 Firefox']
9797
}
@@ -105,7 +105,7 @@ console.log(together);
105105
// Logs:
106106
{
107107
presets: [
108-
['babel-preset-env', {
108+
['@babel/preset-env', {
109109
targets: {
110110
browsers: [
111111
'latest 1 Chrome',
@@ -139,8 +139,8 @@ config.module
139139
.use('babel')
140140
.tap(options => merge({
141141
plugins: [
142-
require.resolve('babel-plugin-transform-decorators-legacy'),
143-
require.resolve('babel-plugin-transform-class-properties')
142+
require.resolve('@babel/plugin-proposal-decorators'),
143+
require.resolve('@babel/plugin-proposal-class-properties')
144144
]
145145
}, options));
146146
```

packages/compile-loader/package.json

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
"yarn": ">=1.2.1"
2424
},
2525
"dependencies": {
26-
"babel-core": "^6.26.0",
27-
"babel-loader": "^7.1.2",
26+
"@babel/core": "^7.0.0-beta.46",
27+
"babel-loader": "^8.0.0-beta.2",
2828
"babel-merge": "^1.1.0",
2929
"deepmerge": "^1.5.2",
3030
"webpack": "^4.6.0"

packages/jest/package.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@
2222
"yarn": ">=1.2.1"
2323
},
2424
"dependencies": {
25+
"@babel/core": "^7.0.0-beta.46",
26+
"@babel/plugin-transform-modules-commonjs": "^7.0.0-beta.46",
2527
"@neutrinojs/loader-merge": "^8.2.0",
26-
"babel-core": "^6.26.0",
27-
"babel-plugin-transform-es2015-modules-commonjs": "^6.26.0",
28-
"babel-preset-jest": "^22.4.3",
28+
"babel-plugin-jest-hoist": "^22.4.3",
2929
"deepmerge": "^1.5.2",
3030
"eslint": "^4.12.1",
3131
"eslint-plugin-jest": "^21.4.2",

packages/jest/src/index.js

+8-2
Original file line numberDiff line numberDiff line change
@@ -94,9 +94,15 @@ module.exports = (neutrino, opts = {}) => {
9494
neutrino.config.when(usingBabel, () => {
9595
neutrino.use(loaderMerge('compile', 'babel'), {
9696
retainLines: true,
97-
presets: [require.resolve('babel-preset-jest')],
9897
plugins: [
99-
require.resolve('babel-plugin-transform-es2015-modules-commonjs')
98+
// Once babel-preset-jest has better Babel 7 support we should switch back to it
99+
// (or even use babel-jest, which will allow simplifying the transformer too):
100+
// https://github.com/facebook/jest/issues/6126
101+
// For now this plugin is taken from here (we don't need object-rest-spread since node >=8.3):
102+
// https://github.com/facebook/jest/blob/v22.4.2/packages/babel-preset-jest/index.js#L11-L12
103+
require.resolve('babel-plugin-jest-hoist'),
104+
// Since the tests will be run by node which doesn't yet support ES2015 modules
105+
require.resolve('@babel/plugin-transform-modules-commonjs')
100106
]
101107
});
102108
});

packages/jest/src/transformer.js

+12-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,17 @@
1-
const babel = require('babel-core');
1+
const { transform } = require('@babel/core');
22

33
module.exports = {
4+
// This is inspired by:
5+
// https://github.com/facebook/jest/blob/v22.4.2/packages/babel-jest/src/index.js#L105-L147
6+
// And is required due to:
7+
// https://github.com/facebook/jest/issues/1468
8+
// TODO: See if it would be easier to switch to the higher-level babel-jest,
9+
// and wrap that instead.
410
process(src, filename, config) {
5-
return babel.util.canCompile(filename) ?
6-
babel.transform(src, Object.assign({}, { filename }, config.globals.BABEL_OPTIONS)).code :
7-
src;
11+
// Babel 7 returns null if the file was ignored.
12+
return transform(
13+
src,
14+
Object.assign({}, { filename }, config.globals.BABEL_OPTIONS)
15+
) || src;
816
}
917
};

packages/library/README.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -252,10 +252,10 @@ module.exports = {
252252

253253
// Add additional Babel plugins, presets, or env options
254254
babel: {
255-
// Override options for babel-preset-env
255+
// Override options for @babel/preset-env
256256
presets: [
257-
['babel-preset-env', {
258-
// Passing in browser targets to babel-preset-env will replace them
257+
['@babel/preset-env', {
258+
// Passing in browser targets to @babel/preset-env will replace them
259259
// instead of merging them when using the 'web' target
260260
targets: {
261261
browsers: [
@@ -282,9 +282,9 @@ module.exports = {
282282
libraryTarget: 'commonjs2',
283283
// Add additional Babel plugins, presets, or env options
284284
babel: {
285-
// Override options for babel-preset-env
285+
// Override options for @babel/preset-env
286286
presets: [
287-
['babel-preset-env', {
287+
['@babel/preset-env', {
288288
targets: {
289289
node: '6.0'
290290
}

packages/library/index.js

+3-5
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,13 @@ module.exports = (neutrino, opts = {}) => {
2525
Object.assign(options, {
2626
babel: compileLoader.merge({
2727
plugins: [
28-
options.target === 'node' ?
29-
require.resolve('babel-plugin-dynamic-import-node') :
30-
require.resolve('babel-plugin-syntax-dynamic-import')
28+
require.resolve('@babel/plugin-syntax-dynamic-import')
3129
],
3230
presets: [
33-
[require.resolve('babel-preset-env'), {
31+
[require.resolve('@babel/preset-env'), {
3432
debug: neutrino.options.debug,
3533
modules: false,
36-
useBuiltIns: true,
34+
useBuiltIns: 'entry',
3735
targets: options.target === 'node' ?
3836
{ node: '8.3' } :
3937
{ browsers: [] }

packages/library/package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,13 @@
3030
"yarn": ">=1.2.1"
3131
},
3232
"dependencies": {
33+
"@babel/core": "^7.0.0-beta.46",
34+
"@babel/plugin-syntax-dynamic-import": "^7.0.0-beta.46",
35+
"@babel/preset-env": "^7.0.0-beta.46",
3336
"@neutrinojs/banner": "^8.2.0",
3437
"@neutrinojs/clean": "^8.2.0",
3538
"@neutrinojs/compile-loader": "^8.2.0",
3639
"@neutrinojs/loader-merge": "^8.2.0",
37-
"babel-plugin-syntax-dynamic-import": "^6.18.0",
38-
"babel-preset-env": "^1.6.0",
3940
"deepmerge": "^1.5.2",
4041
"webpack": "^4.6.0",
4142
"webpack-node-externals": "^1.6.0",

packages/mocha/package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@
2020
"yarn": ">=1.2.1"
2121
},
2222
"dependencies": {
23+
"@babel/core": "^7.0.0-beta.46",
24+
"@babel/plugin-transform-modules-commonjs": "^7.0.0-beta.46",
25+
"@babel/register": "^7.0.0-beta.46",
2326
"@neutrinojs/loader-merge": "^8.2.0",
24-
"babel-plugin-transform-es2015-modules-commonjs": "^6.26.0",
25-
"babel-register": "^6.26.0",
2627
"change-case": "^3.0.1",
2728
"deepmerge": "^1.5.2",
2829
"mocha": "^5.0.0",

0 commit comments

Comments
 (0)