import json
import os
from . import browserify_jsbuild
[docs]class Plugin(browserify_jsbuild.Plugin):
"""
Browserify javascript babel build plugin.
Examples:
Simple example::
IEVVTASKS_BUILDSTATIC_APPS = ievvbuildstatic.config.Apps(
ievvbuildstatic.config.App(
appname='demoapp',
version='1.0.0',
plugins=[
ievvbuildstatic.browserify_babelbuild.Plugin(
sourcefile='app.js',
destinationfile='app.js',
),
]
)
)
Custom source folder example::
IEVVTASKS_BUILDSTATIC_APPS = ievvbuildstatic.config.Apps(
ievvbuildstatic.config.App(
appname='demoapp',
version='1.0.0',
plugins=[
ievvbuildstatic.browserify_babelbuild.Plugin(
sourcefolder=os.path.join('scripts', 'javascript', 'api'),
sourcefile='api.js',
destinationfile='api.js',
),
]
)
)
"""
name = 'browserify_babelbuild'
def __init__(self, echmascript_version='es2015', autocreate_babelrc=True, **kwargs):
"""
Parameters:
echmascript_version: The echmascript version to use. Defaults to ``"es2015"``.
autocreate_babelrc (bool):
**kwargs: Kwargs for
:class:`ievv_opensource.utils.ievvbuildstatic.browserify_jsbuild.Plugin`.
"""
self.echmascript_version = echmascript_version
self.autocreate_babelrc = autocreate_babelrc
super(Plugin, self).__init__(**kwargs)
[docs] def install(self):
"""
Installs the ``babelify`` and ``babel-preset-<echmascript_version kwarg>``
NPM packages in addition to the packages installed by
:meth:`ievv_opensource.utils.ievvbuildstatic.browserify_jsbuild.Plugin.install`.
The packages are installed with no version specified, so you
probably want to freeze the versions using the
:class:`ievv_opensource.utils.ievvbuildstatic.npminstall.Plugin` plugin.
"""
super(Plugin, self).install()
self.app.get_installer('npm').queue_install(
'babelify')
self.app.get_installer('npm').queue_install(
'babel-preset-{}'.format(self.echmascript_version))
[docs] def get_babel_presets(self):
"""
Get a list of babelify presets.
This is the presets that go into ``<HERE>`` in
``babelify -t [ babelify --presets [ <HERE> ] ]``.
Defaults to ``["<the echmascript_version kwarg>"]``.
"""
presets = [self.echmascript_version]
return presets
def get_babelrc_path(self):
return self.app.get_source_path('.babelrc')
def babelrc_exists(self):
return os.path.exists(self.get_babelrc_path())
def make_babelrc_dict(self):
return {
"presets": self.get_babel_presets()
}
def create_babelrc(self):
open(self.get_babelrc_path(), 'w').write(
json.dumps(
self.make_babelrc_dict(),
indent=2,
sort_keys=True
))
[docs] def post_run(self):
if self.autocreate_babelrc:
self.create_babelrc()
elif not self.babelrc_exists():
self.get_logger().command_error(
'{babelrc_path} does not exist.'
'When configured with autocreate_babelrc=False, we expect '
'you to create the .babelrc.'.format(babelrc_path=self.get_babelrc_path()))
raise SystemExit()