We are duplicating semver. It's such a small package that I don't think that it is worth spending much time trying to understand why.
169 lines
4.7 KiB
JavaScript
169 lines
4.7 KiB
JavaScript
"use strict";
|
|
|
|
/**
|
|
* This file contains the Gulp tasks for babel-standalone. Note that
|
|
* babel-standalone is compiled using Webpack, and performs its own Babel
|
|
* compilation of all the JavaScript files. This is because it targets web
|
|
* browsers, so more transforms are needed than the regular Babel builds that
|
|
* only target Node.js.
|
|
*
|
|
* The tasks in this file are designed to be reusable, so that they can be used
|
|
* to make standalone builds of other Babel plugins/presets (such as babel-minify)
|
|
*/
|
|
|
|
const path = require("path");
|
|
const pump = require("pump");
|
|
const chalk = require("chalk");
|
|
const through = require("through2");
|
|
const fancyLog = require("fancy-log");
|
|
const rename = require("gulp-rename");
|
|
const webpack = require("webpack");
|
|
const { RootMostResolvePlugin } = require("webpack-dependency-suite");
|
|
const DuplicatePackageCheckerPlugin = require("duplicate-package-checker-webpack-plugin");
|
|
const webpackStream = require("webpack-stream");
|
|
const uglify = require("gulp-uglify");
|
|
|
|
function webpackBuild(opts) {
|
|
const plugins = opts.plugins || [];
|
|
let babelVersion = require("../packages/babel-core/package.json").version;
|
|
let version = opts.version || babelVersion;
|
|
// If this build is part of a pull request, include the pull request number in
|
|
// the version number.
|
|
if (process.env.CIRCLE_PR_NUMBER) {
|
|
const prVersion = "+pr." + process.env.CIRCLE_PR_NUMBER;
|
|
babelVersion += prVersion;
|
|
version += prVersion;
|
|
}
|
|
|
|
const config = {
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /\.js$/,
|
|
loader: "babel-loader",
|
|
options: {
|
|
// Use the bundled config so that module syntax is passed through
|
|
// for Webpack.
|
|
envName: "standalone",
|
|
},
|
|
},
|
|
],
|
|
},
|
|
node: {
|
|
// Mock Node.js modules that Babel require()s but that we don't
|
|
// particularly care about.
|
|
fs: "empty",
|
|
module: "empty",
|
|
net: "empty",
|
|
},
|
|
output: {
|
|
filename: opts.filename,
|
|
library: opts.library,
|
|
libraryTarget: "umd",
|
|
},
|
|
plugins: [
|
|
new DuplicatePackageCheckerPlugin({
|
|
exclude(instance) {
|
|
return instance.name === "semver";
|
|
},
|
|
}),
|
|
new webpack.DefinePlugin({
|
|
"process.env.NODE_ENV": '"production"',
|
|
"process.env": JSON.stringify({ NODE_ENV: "production" }),
|
|
BABEL_VERSION: JSON.stringify(babelVersion),
|
|
VERSION: JSON.stringify(version),
|
|
}),
|
|
/*new webpack.NormalModuleReplacementPlugin(
|
|
/..\/..\/package/,
|
|
"../../../../src/babel-package-shim"
|
|
),*/
|
|
new webpack.optimize.ModuleConcatenationPlugin(),
|
|
].concat(plugins),
|
|
resolve: {
|
|
plugins: [
|
|
// Dedupe packages that are used across multiple plugins.
|
|
// This replaces DedupePlugin from Webpack 1.x
|
|
new RootMostResolvePlugin(__dirname, true),
|
|
],
|
|
},
|
|
};
|
|
|
|
if (opts.library !== "Babel") {
|
|
config.externals = {
|
|
"@babel/standalone": "Babel",
|
|
};
|
|
}
|
|
|
|
return webpackStream(config, webpack);
|
|
// To write JSON for debugging:
|
|
/*return webpackStream(config, webpack, (err, stats) => {
|
|
require("fancy-log")(stats.toString({ colors: true }));
|
|
require("fs").writeFileSync(
|
|
"webpack-debug.json",
|
|
JSON.stringify(stats.toJson())
|
|
);
|
|
});*/
|
|
}
|
|
|
|
function logUglify() {
|
|
return through.obj(function(file, enc, callback) {
|
|
fancyLog(
|
|
`Minifying '${chalk.cyan(
|
|
path.relative(path.join(__dirname, ".."), file.path)
|
|
)}'...`
|
|
);
|
|
callback(null, file);
|
|
});
|
|
}
|
|
|
|
function logNoUglify() {
|
|
return through.obj(function(file, enc, callback) {
|
|
fancyLog(
|
|
chalk.yellow(
|
|
`Skipped minification of '${chalk.cyan(
|
|
path.relative(path.join(__dirname, ".."), file.path)
|
|
)}' because not publishing`
|
|
)
|
|
);
|
|
callback(null, file);
|
|
});
|
|
}
|
|
|
|
function registerStandalonePackageTask(
|
|
gulp,
|
|
name,
|
|
exportName,
|
|
pathname,
|
|
version,
|
|
plugins
|
|
) {
|
|
const standaloneName = name + "-standalone";
|
|
const standalonePath = path.join(pathname, standaloneName);
|
|
gulp.task("build-" + standaloneName, cb => {
|
|
pump(
|
|
[
|
|
gulp.src(path.join(standalonePath, "src/index.js")),
|
|
webpackBuild({
|
|
filename: name + ".js",
|
|
library: exportName,
|
|
version,
|
|
plugins,
|
|
}),
|
|
gulp.dest(standalonePath),
|
|
].concat(
|
|
// Minification is super slow, so we skip it unless we are publishing
|
|
process.env.IS_PUBLISH ? logUglify() : logNoUglify(),
|
|
process.env.IS_PUBLISH ? uglify() : [],
|
|
rename({ extname: ".min.js" }),
|
|
gulp.dest(standalonePath)
|
|
),
|
|
cb
|
|
);
|
|
});
|
|
}
|
|
|
|
module.exports = {
|
|
webpackBuild: webpackBuild,
|
|
registerStandalonePackageTask: registerStandalonePackageTask,
|
|
};
|