Skip to content

Commit

Permalink
create babel-preset and babel-register modules (#13973)
Browse files Browse the repository at this point in the history
* [babel] create babel-preset and babel-register modules

* [babel-preset] add comments to babel-preset-env.target choices

* [babel-preset] use more normal BUILT_WITH_BABEL signal

* [babel-register] extended comment about filtering ./src in dist

* [babel-preset] stage of class properties has changed, sorta

(cherry picked from commit 48d35f8)
  • Loading branch information
spalger committed Sep 20, 2017
1 parent 1ee627a commit 9636686
Show file tree
Hide file tree
Showing 28 changed files with 143 additions and 154 deletions.
2 changes: 1 addition & 1 deletion Gruntfile.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
require('./src/optimize/babel/register');
require('./src/babel-register');

module.exports = function (grunt) {
// set the config once before calling load-grunt-config
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -89,13 +89,13 @@
"ansicolors": "0.3.2",
"autoprefixer": "6.5.4",
"autoprefixer-loader": "2.0.0",
"babel-cli": "6.18.0",
"babel-core": "6.21.0",
"babel-jest": "21.0.0",
"babel-loader": "6.2.10",
"babel-plugin-add-module-exports": "0.2.1",
"babel-plugin-transform-async-generator-functions": "6.24.1",
"babel-plugin-transform-class-properties": "6.24.1",
"babel-plugin-transform-define": "1.3.0",
"babel-plugin-transform-object-rest-spread": "6.23.0",
"babel-polyfill": "6.20.0",
"babel-preset-env": "1.4.0",
Expand Down
2 changes: 1 addition & 1 deletion scripts/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ node scripts/{{script name}} --help

This directory is excluded from the build and tools within it should help users discover their capabilities. Each script in this directory must:

- include the `../src/optimize/babel/register` module to bootstrap babel
- require `src/babel-register` to bootstrap babel
- call out to source code that is in the `src` directory
- react to the `--help` flag
- run everywhere OR check and fail fast when a required OS or toolchain is not available
2 changes: 1 addition & 1 deletion scripts/docs.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
require('../src/optimize/babel/register');
require('../src/babel-register');
require('../src/docs/cli');
2 changes: 1 addition & 1 deletion scripts/es_archiver.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
require('../src/optimize/babel/register');
require('../src/babel-register');
require('../src/es_archiver/cli');
2 changes: 1 addition & 1 deletion scripts/functional_test_runner.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
require('../src/optimize/babel/register');
require('../src/babel-register');
require('../src/functional_test_runner/cli');
3 changes: 1 addition & 2 deletions scripts/jest.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,5 @@
//
// See all cli options in https://facebook.github.io/jest/docs/cli.html

require('../src/optimize/babel/register');
require('../src/babel-register');
require('../src/jest/cli');

2 changes: 1 addition & 1 deletion scripts/mocha.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
require('../src/optimize/babel/register');
require('../src/babel-register');
require('../test/scripts/run_mocha');
19 changes: 19 additions & 0 deletions src/babel-preset/common.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
module.exports = {
presets: [
require.resolve('babel-preset-react'),
],
plugins: [
require.resolve('babel-plugin-add-module-exports'),
// stage 3
require.resolve('babel-plugin-transform-async-generator-functions'),
require.resolve('babel-plugin-transform-object-rest-spread'),

// the class properties proposal was merged with the private fields proposal
// into the "class fields" proposal. Babel doesn't support this combined
// proposal yet, which includes private field, so this transform is
// TECHNICALLY stage 2, but for all intents and purposes it's stage 3
//
// See https://github.com/babel/proposals/issues/12 for progress
require.resolve('babel-plugin-transform-class-properties'),
],
};
31 changes: 31 additions & 0 deletions src/babel-preset/node.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
module.exports = {
presets: [
[
require.resolve('babel-preset-env'),
{
targets: {
// only applies the necessary transformations based on the
// current node.js processes version. For example: running
// `nvm install 8 && node ./src/cli` will run kibana in node
// version 8 and babel will stop transpiling async/await
// because they are supported in the "current" version of node
node: 'current',
},

// replaces `import "babel-polyfill"` with a list of require statements
// for just the polyfills that the target versions don't already supply
// on their own
useBuiltIns: true,
},
],
require('./common'),
],
plugins: [
[
require.resolve('babel-plugin-transform-define'),
{
'global.__BUILT_WITH_BABEL__': 'true'
}
]
]
};
18 changes: 18 additions & 0 deletions src/babel-preset/webpack.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
module.exports = {
presets: [
[
require.resolve('babel-preset-env'),
{
targets: {
browsers: [
'last 2 versions',
'> 5%',
'Safari 7', // for PhantomJS support
],
},
useBuiltIns: true,
},
],
require('./common'),
]
};
5 changes: 5 additions & 0 deletions src/babel-register/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// register and polyfill need to happen in this
// order and in separate files. Checkout each file
// for a much more detailed explaination
require('./register');
require('./polyfill');
10 changes: 10 additions & 0 deletions src/babel-register/polyfill.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
// `babel-preset-env` looks for and rewrites the following import
// statement into a list of import statements based on the polyfills
// necessary for our target environment (the current version of node)
// but since it does that during compilation, `import 'babel-polyfill'`
// must be in a file that is loaded with `require()` AFTER `babel-register`
// is configured.
//
// This is why we have this single statement in it's own file and require
// it from ./index.js
import 'babel-polyfill';
34 changes: 34 additions & 0 deletions src/babel-register/register.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
const { resolve } = require('path');

// this must happen before `require('babel-register')` and can't be changed
// once the module has been loaded
if (!process.env.BABEL_CACHE_PATH) {
process.env.BABEL_CACHE_PATH = resolve(__dirname, '../../optimize/.babelcache.json');
}

// paths that babel-register should ignore
const ignore = [
/[\\\/](node_modules|bower_components)[\\\/]/,
];

if (global.__BUILT_WITH_BABEL__) {
// when building the Kibana source we replace the statement
// `global.__BUILT_WITH_BABEL__` with the value `true` so that
// when babel-register is required for the first time by users
// it will exclude kibana's `src` directory.
//
// We still need babel-register for plugins though, we've been
// building their server code at require-time since version 4.2
// TODO: the plugin install process could transpile plugin server code...
ignore.push(resolve(__dirname, '../../src'));
}

// modifies all future calls to require() to automatically
// compile the required source with babel
require('babel-register')({
ignore,
babelrc: false,
presets: [
require.resolve('../babel-preset/node')
],
});
2 changes: 1 addition & 1 deletion src/cli/index.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
require('../optimize/babel/register');
require('../babel-register');
require('./cli');
2 changes: 1 addition & 1 deletion src/cli_plugin/index.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
require('../optimize/babel/register');
require('../babel-register');
require('./cli');
9 changes: 5 additions & 4 deletions src/jest/babelTransform.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
const babelJest = require('babel-jest');
const options = require('../optimize/babel/options');

const babelOptions = options.node;

module.exports = babelJest.createTransformer(babelOptions);
module.exports = babelJest.createTransformer({
presets: [
require.resolve('../babel-preset/node')
]
});
8 changes: 0 additions & 8 deletions src/optimize/babel/.eslintrc

This file was deleted.

61 changes: 0 additions & 61 deletions src/optimize/babel/helpers.js

This file was deleted.

20 changes: 0 additions & 20 deletions src/optimize/babel/options.build.js

This file was deleted.

24 changes: 0 additions & 24 deletions src/optimize/babel/options.js

This file was deleted.

2 changes: 0 additions & 2 deletions src/optimize/babel/polyfills.js

This file was deleted.

3 changes: 0 additions & 3 deletions src/optimize/babel/register.js

This file was deleted.

7 changes: 5 additions & 2 deletions src/optimize/base_optimizer.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import UglifyJsPlugin from 'webpack/lib/optimize/UglifyJsPlugin';
import { defaults, transform } from 'lodash';

import { fromRoot } from '../utils';
import babelOptions from './babel/options';
import pkg from '../../package.json';
import { setLoaderQueryParam, makeLoaderString } from './loaders';

Expand Down Expand Up @@ -133,7 +132,11 @@ export default class BaseOptimizer {
test: /\.js$/,
exclude: babelExclude.concat(this.env.noParse),
loader: 'babel-loader',
query: babelOptions.webpack
query: {
presets: [
require.resolve('../babel-preset/webpack')
]
}
},
],
postLoaders: this.env.postLoaders || [],
Expand Down
14 changes: 0 additions & 14 deletions tasks/build/babel_options.js

This file was deleted.

1 change: 0 additions & 1 deletion tasks/build/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ module.exports = function (grunt) {
'copy:devSource',
'clean:devSourceForTestbed',
'babel:build',
'_build:babelOptions',
'_build:plugins',
'_build:data',
'_build:verifyTranslations',
Expand Down
8 changes: 5 additions & 3 deletions tasks/config/babel.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import babelOptions from '../../src/optimize/babel/options';

module.exports = {
build: {
options: babelOptions.node,
options: {
presets: [
require.resolve('../../src/babel-preset/node')
]
},
src: [
'build/kibana/**/*.js',
'!**/public/**',
Expand Down
2 changes: 1 addition & 1 deletion test/mocha_setup.js
Original file line number Diff line number Diff line change
@@ -1 +1 @@
require('../src/optimize/babel/register');
require('../src/babel-register');

0 comments on commit 9636686

Please sign in to comment.