diff --git a/.babelrc b/.babelrc index 6a251f34..572cda94 100644 --- a/.babelrc +++ b/.babelrc @@ -9,5 +9,17 @@ "plugins": [ "add-module-exports" - ] + ], + + "env": { + "rollup": { + "presets": [ + [ + "@babel/preset-env", { + "modules": "false" + } + ] + ] + } + } } diff --git a/package.json b/package.json index 0abf89c8..a66d7556 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,6 @@ "fancy-log": "1.3.3", "fs-extra": "9.0.0", "gulp": "4.0.2", - "gulp-babel": "8.0.0", "gulp-bump": "3.1.3", "gulp-conventional-changelog": "2.0.29", "gulp-eslint": "6.0.0", @@ -61,8 +60,11 @@ "jasmine-core": "3.5.0", "rimraf": "3.0.2", "rollup": "1.32.1", + "rollup-plugin-babel": "4.4.0", "rollup-plugin-commonjs": "10.1.0", "rollup-plugin-node-resolve": "5.2.0", + "rollup-plugin-prettier": "0.6.0", + "rollup-plugin-strip-banner": "1.2.0", "tmp": "0.1.0" } } diff --git a/scripts/build/index.js b/scripts/build/index.js index d6c739ba..e92372ca 100644 --- a/scripts/build/index.js +++ b/scripts/build/index.js @@ -22,13 +22,13 @@ * SOFTWARE. */ -const path = require('path'); -const gulp = require('gulp'); -const babel = require('gulp-babel'); -const config = require('../config'); +const rollup = require('rollup'); +const config = require('./rollup.config'); module.exports = function build() { - return gulp.src(path.join(config.src, '**', '*.js')) - .pipe(babel()) - .pipe(gulp.dest(config.dist)); + return rollup.rollup(config).then((bundle) => ( + Promise.all(config.output.map((output) => ( + bundle.write(output) + ))) + )); }; diff --git a/scripts/build/rollup.config.js b/scripts/build/rollup.config.js new file mode 100644 index 00000000..9f5ad927 --- /dev/null +++ b/scripts/build/rollup.config.js @@ -0,0 +1,67 @@ +/** + * The MIT License (MIT) + * + * Copyright (c) 2016-2019 Mickael Jeanroy + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +const path = require('path'); +const fs = require('fs'); +const commenting = require('commenting'); +const stripBanner = require('rollup-plugin-strip-banner'); +const babel = require('rollup-plugin-babel'); +const prettier = require('rollup-plugin-prettier'); +const config = require('../config'); +const pkg = require('../../package.json'); +const license = fs.readFileSync(path.join(config.root, 'LICENSE'), 'utf-8'); + +module.exports = { + input: path.join(config.src, 'index.js'), + + output: [ + { + format: 'cjs', + file: path.join(config.dist, 'index.js'), + banner: commenting(license, { + extension: '.js', + }), + }, + ], + + plugins: [ + stripBanner(), + + babel({ + envName: 'rollup', + }), + + prettier({ + parser: 'babel', + }), + ], + + external: [ + 'fs', + 'path', + + ...Object.keys(pkg.dependencies), + ...Object.keys(pkg.peerDependencies), + ], +};