Skip to content

Commit

Permalink
Use rollup for all builds
Browse files Browse the repository at this point in the history
- Provide production-ready versions of CJS and ESM builds
- Deprecate requiring individual files, e.g. require('react-router/Route')
- Remove dependency on babel-plugin-transform-imports

Fixes #6387
  • Loading branch information
mjackson committed Oct 12, 2018
1 parent 0aef848 commit 5bde02b
Show file tree
Hide file tree
Showing 102 changed files with 938 additions and 606 deletions.
5 changes: 2 additions & 3 deletions packages/react-router-config/.gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
es/
cjs/
esm/
umd/
/*.js
!/rollup.config.js
7 changes: 7 additions & 0 deletions packages/react-router-config/es/matchRoutes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
"use strict";

import warnAboutDeprecatedESMImport from "./warnAboutDeprecatedESMImport.js";
warnAboutDeprecatedESMImport("matchRoutes");

import { matchRoutes } from "../esm/react-router-config.js";
export default matchRoutes;
7 changes: 7 additions & 0 deletions packages/react-router-config/es/renderRoutes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
"use strict";

import warnAboutDeprecatedESMImport from "./warnAboutDeprecatedESMImport.js";
warnAboutDeprecatedESMImport("renderRoutes");

import { renderRoutes } from "../esm/react-router-config.js";
export default renderRoutes;
35 changes: 35 additions & 0 deletions packages/react-router-config/es/warnAboutDeprecatedESMImport.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
"use strict";

var printWarning = function() {};

if (process.env.NODE_ENV !== "production") {
printWarning = function(format, subs) {
var index = 0;
var message =
"Warning: " +
(subs.length > 0
? format.replace(/%s/g, function() {
return subs[index++];
})
: format);

if (typeof console !== "undefined") {
console.error(message);
}

try {
// --- Welcome to debugging React Router ---
// This error was thrown as a convenience so that you can use the
// stack trace to find the callsite that triggered this warning.
throw new Error(message);
} catch (e) {}
};
}

export default function(member) {
printWarning(
'Please use `import { %s } from "react-router-config"` instead of `import %s from "react-router-config/%s"`. ' +
"Support for the latter will be removed in the next major release.",
[member, member]
);
}
7 changes: 7 additions & 0 deletions packages/react-router-config/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
"use strict";

if (process.env.NODE_ENV === "production") {
module.exports = require("./cjs/react-router-config.min.js");
} else {
module.exports = require("./cjs/react-router-config.js");
}
3 changes: 3 additions & 0 deletions packages/react-router-config/matchRoutes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";
require("./warnAboutDeprecatedCJSRequire.js")("matchRoutes");
module.exports = require("./index.js").matchRoutes;
48 changes: 7 additions & 41 deletions packages/react-router-config/modules/.babelrc
Original file line number Diff line number Diff line change
@@ -1,51 +1,17 @@
{
"presets": [["env", { "loose": true, "modules": false }], "react"],
"plugins": [
"dev-expression",
["transform-object-rest-spread", { "useBuiltIns": true }],
"transform-export-extensions"
],
"env": {
"build-cjs": {
"presets": [["env", { "loose": true }], "react"],
"plugins": [
"dev-expression",
["transform-object-rest-spread", { "useBuiltIns": true }],
"transform-export-default",
[
"transform-imports",
{
"react-router": {
"transform": "react-router/${member}"
}
}
]
]
},
"build-esm": {
"presets": [["env", { "loose": true, "modules": false }], "react"],
"plugins": [
"dev-expression",
["transform-object-rest-spread", { "useBuiltIns": true }],
"transform-export-default",
[
"transform-imports",
{
"react-router": {
"transform": "react-router/es/${member}"
}
}
]
]
},
"test": {
"presets": [["env", { "loose": true }], "react"],
"plugins": [
"dev-expression",
["transform-object-rest-spread", { "useBuiltIns": true }],
"transform-export-default",
[
"transform-imports",
{
"react-router": {
"transform": "react-router/modules/${member}"
}
}
]
"transform-export-extensions"
]
}
}
Expand Down
17 changes: 9 additions & 8 deletions packages/react-router-config/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 4 additions & 2 deletions packages/react-router-config/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,16 @@
"Ryan Florence"
],
"files": [
"cjs",
"es",
"esm",
"index.js",
"matchRoutes.js",
"renderRoutes.js",
"umd"
],
"main": "index.js",
"module": "es/index.js",
"module": "esm/index.js",
"sideEffects": false,
"scripts": {
"build": "node ./scripts/build.js",
Expand All @@ -34,7 +36,7 @@
"babel-jest": "^23.0.1",
"babel-plugin-dev-expression": "^0.2.1",
"babel-plugin-external-helpers": "^6.22.0",
"babel-plugin-transform-export-default": "^7.0.0-alpha.20",
"babel-plugin-transform-export-extensions": "^6.22.0",
"babel-plugin-transform-imports": "^1.5.1",
"babel-plugin-transform-object-rest-spread": "^6.26.0",
"babel-preset-env": "^1.7.0",
Expand Down
3 changes: 3 additions & 0 deletions packages/react-router-config/renderRoutes.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";
require("./warnAboutDeprecatedCJSRequire.js")("renderRoutes");
module.exports = require("./index.js").renderRoutes;
18 changes: 3 additions & 15 deletions packages/react-router-config/rollup.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,33 +6,21 @@ import resolve from "rollup-plugin-node-resolve";

const config = {
output: {
format: "umd",
name: "ReactRouterConfig",
globals: {
react: "React",
"react-router": "ReactRouter",
"react-router/es/Route": "ReactRouter.Route",
"react-router/es/Router": "ReactRouter.Router",
"react-router/es/Switch": "ReactRouter.Switch",
"react-router/es/matchPath": "ReactRouter.matchPath"
"react-router": "ReactRouter"
}
},
external: [
"react",
"react-router",
"react-router/es/Route",
"react-router/es/Router",
"react-router/es/Switch",
"react-router/es/matchPath"
],
external: ["react", "react-router"],
plugins: [
babel({
exclude: "node_modules/**",
plugins: ["external-helpers"]
}),
resolve(),
commonjs({
include: /node_modules/
include: "node_modules/**"
}),
replace({
"process.env.NODE_ENV": JSON.stringify(process.env.NODE_ENV)
Expand Down
31 changes: 12 additions & 19 deletions packages/react-router-config/scripts/build.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,34 +10,27 @@ function exec(command, extraEnv) {
});
}

console.log("Building CommonJS modules ...");
console.log();

exec("babel modules -d . --ignore __tests__", {
BABEL_ENV: "build-cjs"
exec("rollup -c -i modules/index.js -o cjs/react-router-config.js -f cjs", {
NODE_ENV: "development"
});

console.log();
console.log("Building ES modules ...");
console.log();
exec("rollup -c -i modules/index.js -o cjs/react-router-config.min.js -f cjs", {
NODE_ENV: "production"
});

exec("babel modules -d es --ignore __tests__", {
BABEL_ENV: "build-esm"
exec("rollup -c -i modules/index.js -o esm/react-router-config.js -f esm", {
NODE_ENV: "development"
});

console.log();
console.log("Building react-router-config.js ...");
exec("rollup -c -i modules/index.js -o esm/react-router-config.min.js -f esm", {
NODE_ENV: "production"
});

exec("rollup -c -i modules/index.js -o umd/react-router-config.js", {
BABEL_ENV: "build-esm",
exec("rollup -c -i modules/index.js -o umd/react-router-config.js -f umd", {
NODE_ENV: "development"
});

console.log();
console.log("Building react-router-config.min.js ...");

exec("rollup -c -i modules/index.js -o umd/react-router-config.min.js", {
BABEL_ENV: "build-esm",
exec("rollup -c -i modules/index.js -o umd/react-router-config.min.js -f umd", {
NODE_ENV: "production"
});

Expand Down
35 changes: 35 additions & 0 deletions packages/react-router-config/warnAboutDeprecatedCJSRequire.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
"use strict";

var printWarning = function() {};

if (process.env.NODE_ENV !== "production") {
printWarning = function(format, subs) {
var index = 0;
var message =
"Warning: " +
(subs.length > 0
? format.replace(/%s/g, function() {
return subs[index++];
})
: format);

if (typeof console !== "undefined") {
console.error(message);
}

try {
// --- Welcome to debugging React Router ---
// This error was thrown as a convenience so that you can use the
// stack trace to find the callsite that triggered this warning.
throw new Error(message);
} catch (e) {}
};
}

module.exports = function(member) {
printWarning(
'Please use `require("react-router-config").%s` instead of `require("react-router-config/%s")`. ' +
"Support for the latter will be removed in the next major release.",
[member, member]
);
};
5 changes: 2 additions & 3 deletions packages/react-router-dom/.gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
es/
cjs/
esm/
umd/
/*.js
!/rollup.config.js
3 changes: 3 additions & 0 deletions packages/react-router-dom/BrowserRouter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";
require("./warnAboutDeprecatedCJSRequire")("BrowserRouter");
module.exports = require("./index.js").BrowserRouter;
3 changes: 3 additions & 0 deletions packages/react-router-dom/HashRouter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";
require("./warnAboutDeprecatedCJSRequire")("HashRouter");
module.exports = require("./index.js").HashRouter;
3 changes: 3 additions & 0 deletions packages/react-router-dom/Link.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";
require("./warnAboutDeprecatedCJSRequire")("Link");
module.exports = require("./index.js").Link;
3 changes: 3 additions & 0 deletions packages/react-router-dom/MemoryRouter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";
require("./warnAboutDeprecatedCJSRequire")("MemoryRouter");
module.exports = require("./index.js").MemoryRouter;
3 changes: 3 additions & 0 deletions packages/react-router-dom/NavLink.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";
require("./warnAboutDeprecatedCJSRequire")("NavLink");
module.exports = require("./index.js").NavLink;
3 changes: 3 additions & 0 deletions packages/react-router-dom/Prompt.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";
require("./warnAboutDeprecatedCJSRequire")("Prompt");
module.exports = require("./index.js").Prompt;
3 changes: 3 additions & 0 deletions packages/react-router-dom/Redirect.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";
require("./warnAboutDeprecatedCJSRequire")("Redirect");
module.exports = require("./index.js").Redirect;
3 changes: 3 additions & 0 deletions packages/react-router-dom/Route.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";
require("./warnAboutDeprecatedCJSRequire")("Route");
module.exports = require("./index.js").Route;
3 changes: 3 additions & 0 deletions packages/react-router-dom/Router.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";
require("./warnAboutDeprecatedCJSRequire")("Router");
module.exports = require("./index.js").Router;
3 changes: 3 additions & 0 deletions packages/react-router-dom/StaticRouter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";
require("./warnAboutDeprecatedCJSRequire")("StaticRouter");
module.exports = require("./index.js").StaticRouter;
3 changes: 3 additions & 0 deletions packages/react-router-dom/Switch.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"use strict";
require("./warnAboutDeprecatedCJSRequire")("Switch");
module.exports = require("./index.js").Switch;
7 changes: 7 additions & 0 deletions packages/react-router-dom/es/BrowserRouter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
"use strict";

import warnAboutDeprecatedESMImport from "./warnAboutDeprecatedESMImport.js";
warnAboutDeprecatedESMImport("BrowserRouter");

import { BrowserRouter } from "../esm/react-router-dom.js";
export default BrowserRouter;
7 changes: 7 additions & 0 deletions packages/react-router-dom/es/HashRouter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
"use strict";

import warnAboutDeprecatedESMImport from "./warnAboutDeprecatedESMImport.js";
warnAboutDeprecatedESMImport("HashRouter");

import { HashRouter } from "../esm/react-router-dom.js";
export default HashRouter;
7 changes: 7 additions & 0 deletions packages/react-router-dom/es/Link.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
"use strict";

import warnAboutDeprecatedESMImport from "./warnAboutDeprecatedESMImport.js";
warnAboutDeprecatedESMImport("Link");

import { Link } from "../esm/react-router-dom.js";
export default Link;
7 changes: 7 additions & 0 deletions packages/react-router-dom/es/MemoryRouter.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
"use strict";

import warnAboutDeprecatedESMImport from "./warnAboutDeprecatedESMImport.js";
warnAboutDeprecatedESMImport("MemoryRouter");

import { MemoryRouter } from "../esm/react-router-dom.js";
export default MemoryRouter;
Loading

4 comments on commit 5bde02b

@TrySound
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@mjackson I think you just broke everybody's build. esm/index.js doesn't exist. At least I don't see what generates it.

Can we go with old school way and just leave NODE_ENV replacing for user? This will allow to have such beautiful dist
https://unpkg.com/react-beautiful-dnd@9.0.2/dist/

@TrySound
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

By the way you also bundled prop types which is bad for users bundles. If you want I can simplify the build step a bit.

@mjackson
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@TrySound Ah yes, I was trying to figure out what else I could point to besides esm/index.js. I guess we just point it at the development build for now? And yes, I would love some help cleaning up and simplifying the build. I know you've done a ton of work on this for React itself.

@mjackson
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@TrySound Let's discuss in #6393

Please sign in to comment.