diff --git a/packages/gatsby-cli/.babelrc b/packages/gatsby-cli/.babelrc index ac0ad292bb087..eb6ed780bceff 100644 --- a/packages/gatsby-cli/.babelrc +++ b/packages/gatsby-cli/.babelrc @@ -1,3 +1,20 @@ { - "presets": [["babel-preset-gatsby-package"]] + "presets": [ + [ + "@babel/env", + { + "modules": false, + "shippedProposals": true, + "targets": { "node": "10.13.0" } + } + ], + "@babel/preset-react" + ], + "plugins": ["@babel/plugin-transform-runtime"], + "overrides": [ + { + "test": ["**/*.ts", "**/*.tsx"], + "plugins": [["@babel/plugin-transform-typescript", { "isTSX": true }]] + } + ] } diff --git a/packages/gatsby-cli/non-rollup-babel.config.js b/packages/gatsby-cli/non-rollup-babel.config.js new file mode 100644 index 0000000000000..ebde19e411202 --- /dev/null +++ b/packages/gatsby-cli/non-rollup-babel.config.js @@ -0,0 +1,7 @@ +// This being a babel.config.js file instead of a .babelrc file allows the +// packages in `internal-plugins` to be compiled with the rest of the source. +// Ref: https://github.com/babel/babel/pull/7358 + +const configPath = require(`path`).join(__dirname, `..`, `..`, `.babelrc.js`) + +module.exports = require(configPath) diff --git a/packages/gatsby-cli/package.json b/packages/gatsby-cli/package.json index d75eec7a3f874..5265019ed7ea5 100644 --- a/packages/gatsby-cli/package.json +++ b/packages/gatsby-cli/package.json @@ -27,8 +27,6 @@ "gatsby-recipes": "^0.2.26", "gatsby-telemetry": "^1.3.34", "hosted-git-info": "^3.0.4", - "ink": "^2.7.1", - "ink-spinner": "^3.1.0", "is-valid-path": "^0.1.1", "lodash": "^4.17.20", "meant": "^1.0.1", @@ -37,7 +35,6 @@ "pretty-error": "^2.1.1", "progress": "^2.0.3", "prompts": "^2.3.2", - "react": "^16.8.0", "redux": "^4.0.5", "resolve-cwd": "^3.0.0", "semver": "^7.3.2", @@ -48,16 +45,29 @@ "update-notifier": "^4.1.0", "uuid": "3.4.0", "yargs": "^15.3.1", + "yoga-layout-prebuilt": "^1.9.6", "yurnalist": "^1.1.2" }, "devDependencies": { "@babel/cli": "^7.11.6", "@babel/core": "^7.11.6", + "@rollup/plugin-babel": "^5.1.0", + "@rollup/plugin-commonjs": "^14.0.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^8.4.0", + "@rollup/plugin-replace": "^2.3.3", "@types/hosted-git-info": "^3.0.0", "@types/yargs": "^15.0.4", "babel-preset-gatsby-package": "^0.5.3", + "concurrently": "^5.0.0", "cross-env": "^5.2.1", "rimraf": "^3.0.2", + "ink": "^2.7.1", + "ink-spinner": "^3.1.0", + "react": "^16.8.0", + "rollup": "^2.23.0", + "rollup-plugin-auto-external": "^2.0.0", + "rollup-plugin-internal": "^1.0.0", "typescript": "^3.9.5" }, "files": [ @@ -77,10 +87,14 @@ "directory": "packages/gatsby-cli" }, "scripts": { - "build": "babel src --out-dir lib --ignore \"**/__tests__\" --extensions \".ts,.js,.tsx\"", + "build:babel": "babel --config-file ./non-rollup-babel.config.js src --out-dir lib --ignore \"**/__tests__\" --ignore \"src/reporter/loggers/ink/**/*\" --extensions \".ts,.js,.tsx\"", + "build:rollup": "rollup -c", + "build": "concurrently \"npm run build:babel\" \"npm run build:rollup\"", "prepare": "cross-env NODE_ENV=production npm run build && npm run typegen", "typegen": "rimraf \"lib/**/*.d.ts\" && tsc --emitDeclarationOnly --declaration --declarationDir lib/", - "watch": "babel -w src --out-dir lib --ignore \"**/__tests__\" --extensions \".ts,.js,.tsx\"", + "watch:babel": "npm run build:babel -- --watch", + "watch:rollup": "npm run build:rollup -- -w", + "watch": "concurrently \"npm run watch:babel\" \"npm run watch:rollup\"", "postinstall": "node scripts/postinstall.js" }, "engines": { diff --git a/packages/gatsby-cli/rollup.config.js b/packages/gatsby-cli/rollup.config.js new file mode 100644 index 0000000000000..7d8655398b406 --- /dev/null +++ b/packages/gatsby-cli/rollup.config.js @@ -0,0 +1,69 @@ +import resolve from "@rollup/plugin-node-resolve" +import babel from "@rollup/plugin-babel" +import commonjs from "@rollup/plugin-commonjs" +import json from "@rollup/plugin-json" +import replace from "@rollup/plugin-replace"; +import autoExternal from "rollup-plugin-auto-external" +import internal from "rollup-plugin-internal" + +import path from "path" + +// Rollup hoists Ink's dynamic require of react-devtools-core which causes +// a window not found error so we exclude Ink's devtools file for now. +function excludeDevTools() { + const re = /ink/ + return { + name: `ignoreDevTools`, + + load(id) { + if (id.match(re)) { + if (path.parse(id).name === `devtools`) { + return { code: `` } + } + } + }, + } +} + +export default { + input: `src/reporter/loggers/ink/index.tsx`, + output: { + file: `lib/reporter/loggers/ink/index.js`, + format: `cjs`, + }, + cache: false, + plugins: [ + replace({ + values: { + "process.env.NODE_ENV": JSON.stringify(`production`) + } + }), + excludeDevTools(), + json(), + babel({ + extensions: [`.js`, `.jsx`, `.es6`, `.es`, `.mjs`, `.ts`, `.tsx`] , + babelHelpers: `runtime`, + skipPreflightCheck: true, + exclude: `node_modules/**`, + }), + resolve({ + extensions: [`.mjs`, `.js`, `.json`, `.node`, `.ts`, `.tsx`], + dedupe: [ `react`, `ink` ] + }), + commonjs(), + autoExternal(), + internal([ + `react`, + `ink`, + `ink-spinner` + ]), + ], + external: [ + `yoga-layout-prebuilt`, + // Next one deserve explanation: ... it's because ink logger imports + // getStore, onLogAction from higher up (../../redux). But we don't want + // two copies of it - one bundled and one not, because it would result + // in multiple store copies + `../../redux` + ] +} diff --git a/yarn.lock b/yarn.lock index bfcbb187c2a9d..d3eb5f10270c9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3107,6 +3107,14 @@ is-module "^1.0.0" resolve "^1.17.0" +"@rollup/plugin-replace@^2.3.3": + version "2.3.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-replace/-/plugin-replace-2.3.3.tgz#cd6bae39444de119f5d905322b91ebd4078562e7" + integrity sha512-XPmVXZ7IlaoWaJLkSCDaa0Y6uVo5XQYHhiMFzOd5qSv5rE+t/UJToPIOE56flKIxBFQI27ONsxb7dqHnwSsjKQ== + dependencies: + "@rollup/pluginutils" "^3.0.8" + magic-string "^0.25.5" + "@rollup/pluginutils@^3.0.0", "@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" @@ -15696,7 +15704,7 @@ magic-string@^0.22.4: dependencies: vlq "^0.2.2" -magic-string@^0.25.2, magic-string@^0.25.3: +magic-string@^0.25.2, magic-string@^0.25.3, magic-string@^0.25.5: version "0.25.7" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==