spinjs
Version:
<p align="center"><a href="#"><img width="150" src="https://rawgit.com/sysgears/jsapp/master/packages/spinjs/logo.svg"></a></p>
55 lines (51 loc) • 2.03 kB
text/typescript
import * as path from 'path';
import { Builder } from '../Builder';
import { ConfigPlugin } from '../ConfigPlugin';
import Spin from '../Spin';
import JSRuleFinder from './shared/JSRuleFinder';
import UPFinder from './shared/UPFinder';
export default class BabelPlugin implements ConfigPlugin {
public configure(builder: Builder, spin: Spin) {
if (
builder.stack.hasAny(['babel', 'es6']) &&
builder.stack.hasAll(['webpack']) &&
(!builder.stack.hasAny('dll') || builder.stack.hasAny(['android', 'ios']))
) {
if (builder.stack.hasAny(['babel', 'es6']) && !builder.stack.hasAny('dll')) {
builder.config = spin.merge(
{
entry: {
index: ['babel-polyfill']
}
},
builder.config
);
}
const jsRuleFinder = new JSRuleFinder(builder);
const jsRule = jsRuleFinder.findAndCreateJSRule();
const cacheDirectory =
builder.cache === false || (builder.cache === 'auto' && !spin.dev)
? false
: path.join(
builder.cache === true || (builder.cache === 'auto' && spin.dev) ? '.cache' : builder.cache,
'babel-loader'
);
const babelrc = new UPFinder(builder).find(['.babelrc', '.babelrc.js', 'babel.config.js']);
jsRule.use = {
loader: builder.require.probe('heroku-babel-loader') ? 'heroku-babel-loader' : 'babel-loader',
options: !!babelrc
? { babelrc: true, cacheDirectory }
: spin.createConfig(builder, 'babel', {
babelrc: false,
cacheDirectory,
compact: !spin.dev,
presets: (['react', ['env', { modules: false }], 'stage-0'] as any[]).concat(
spin.dev ? [] : [['minify', { mangle: false }]]
),
plugins: ['transform-runtime', 'transform-decorators-legacy', 'transform-class-properties'],
only: jsRuleFinder.extensions.map(ext => '*.' + ext)
})
};
}
}
}