From 8269b81a6758d2c03ab85c63e34c9fb63d72b691 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 3 Jun 2020 15:27:08 +0200 Subject: [PATCH 1/7] packages/cli: mimic upcoming publishConfig behavior in prepack --- packages/cli/src/commands/pack.ts | 15 +++++++++------ packages/cli/src/lib/diff/handlers.ts | 4 ++++ packages/cli/src/lib/tasks.ts | 11 +++++------ 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/packages/cli/src/commands/pack.ts b/packages/cli/src/commands/pack.ts index ba9c7725ae..51c7e36086 100644 --- a/packages/cli/src/commands/pack.ts +++ b/packages/cli/src/commands/pack.ts @@ -17,18 +17,21 @@ import fs from 'fs-extra'; import { paths } from '../lib/paths'; +const SKIPPED_KEYS = ['access', 'registry', 'tag']; + export const pre = async () => { const pkgPath = paths.resolveTarget('package.json'); const pkg = await fs.readJson(pkgPath); - pkg.types = 'dist/index.d.ts'; + + for (const key of Object.keys(pkg.publishConfig ?? {})) { + if (!SKIPPED_KEYS.includes(key)) { + pkg[key] = pkg.publishConfig[key]; + } + } await fs.writeJson(pkgPath, pkg, { encoding: 'utf8', spaces: 2 }); }; export const post = async () => { - const pkgPath = paths.resolveTarget('package.json'); - - const pkg = await fs.readJson(pkgPath); - pkg.types = 'src/index.ts'; - await fs.writeJson(pkgPath, pkg, { encoding: 'utf8', spaces: 2 }); + // postpack is a noop for now, since it's not called anyway }; diff --git a/packages/cli/src/lib/diff/handlers.ts b/packages/cli/src/lib/diff/handlers.ts index c4efacb198..40e3d4c587 100644 --- a/packages/cli/src/lib/diff/handlers.ts +++ b/packages/cli/src/lib/diff/handlers.ts @@ -130,6 +130,10 @@ class PackageJsonHandler { // Publish config can be removed the the target, skip in that case if (!targetPublishConf) { + if (await this.prompt('Missing publishConfig, do you want to add it?')) { + this.targetPkg.publishConfig = pkgPublishConf; + await this.write(); + } return; } diff --git a/packages/cli/src/lib/tasks.ts b/packages/cli/src/lib/tasks.ts index f16022ee97..c9b2ca94ed 100644 --- a/packages/cli/src/lib/tasks.ts +++ b/packages/cli/src/lib/tasks.ts @@ -175,7 +175,7 @@ export async function installWithLocalDeps(dir: string) { // types to dist/index.d.ts and the main:src field is removed. // Without this we get type checking errors in the e2e test if (process.env.BACKSTAGE_E2E_CLI_TEST) { - Task.section('Patchling local dependencies for e2e tests'); + Task.section('Patching local dependencies for e2e tests'); for (const name of PATCH_PACKAGES) { await Task.forItem( @@ -192,11 +192,10 @@ export async function installWithLocalDeps(dir: string) { // We want dist to be used for e2e tests delete depJson['main:src']; - depJson.types = 'dist/index.d.ts'; - - // Ugly hack until backend packages can point straight to source - if (name === 'config' || name === 'config-loader') { - depJson.main = 'dist/index.cjs.js'; + for (const key of Object.keys(depJson.publishConfig)) { + if (key !== 'access') { + depJson[key] = depJson.publishConfig[key]; + } } await fs From 0d1655c65b5a109adc9dac6eb6eddd745e6fa932 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Thu, 4 Jun 2020 17:46:59 +0200 Subject: [PATCH 2/7] packages,plugins: use publishConfig to configure published entrypoints --- packages/catalog-model/package.json | 5 ++++- .../templates/default-app/plugins/welcome/package.json.hbs | 4 ++++ packages/cli/templates/default-plugin/package.json.hbs | 4 +++- packages/config-loader/package.json | 5 ++++- packages/config/package.json | 5 ++++- packages/core-api/package.json | 4 +++- packages/core/package.json | 4 +++- packages/dev-utils/package.json | 4 +++- packages/test-utils-core/package.json | 4 +++- packages/test-utils/package.json | 4 +++- packages/theme/package.json | 4 +++- plugins/catalog/package.json | 5 +++++ plugins/circleci/package.json | 5 +++++ plugins/explore/package.json | 5 +++++ plugins/graphiql/package.json | 4 +++- plugins/home-page/package.json | 5 +++++ plugins/lighthouse/package.json | 5 +++++ plugins/register-component/package.json | 5 +++++ plugins/scaffolder/package.json | 5 +++++ plugins/sentry/package.json | 5 +++++ plugins/tech-radar/package.json | 4 +++- plugins/welcome/package.json | 5 +++++ 22 files changed, 88 insertions(+), 12 deletions(-) diff --git a/packages/catalog-model/package.json b/packages/catalog-model/package.json index 2d6df2e34e..2de2e70e8e 100644 --- a/packages/catalog-model/package.json +++ b/packages/catalog-model/package.json @@ -8,7 +8,10 @@ "license": "Apache-2.0", "private": true, "publishConfig": { - "access": "public" + "access": "public", + "main": "dist/index.cjs.js", + "module": "dist/index.esm.js", + "types": "dist/index.d.ts" }, "scripts": { "build": "backstage-cli build", diff --git a/packages/cli/templates/default-app/plugins/welcome/package.json.hbs b/packages/cli/templates/default-app/plugins/welcome/package.json.hbs index b18839bab6..0bc8fd3d2f 100644 --- a/packages/cli/templates/default-app/plugins/welcome/package.json.hbs +++ b/packages/cli/templates/default-app/plugins/welcome/package.json.hbs @@ -5,6 +5,10 @@ "main:src": "src/index.ts", "types": "src/index.ts", "private": true, + "publishConfig": { + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, "scripts": { "build": "backstage-cli plugin:build", "start": "backstage-cli plugin:serve", diff --git a/packages/cli/templates/default-plugin/package.json.hbs b/packages/cli/templates/default-plugin/package.json.hbs index cd628b0406..c92795cc04 100644 --- a/packages/cli/templates/default-plugin/package.json.hbs +++ b/packages/cli/templates/default-plugin/package.json.hbs @@ -7,7 +7,9 @@ "license": "Apache-2.0", "private": true, "publishConfig": { - "access": "public" + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" }, "scripts": { "build": "backstage-cli plugin:build", diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json index 9f403af7e8..2641e988d6 100644 --- a/packages/config-loader/package.json +++ b/packages/config-loader/package.json @@ -4,7 +4,10 @@ "version": "0.1.1-alpha.6", "private": false, "publishConfig": { - "access": "public" + "access": "public", + "main": "dist/index.cjs.js", + "module": "dist/index.esm.js", + "types": "dist/index.d.ts" }, "homepage": "https://backstage.io", "repository": { diff --git a/packages/config/package.json b/packages/config/package.json index 244fbe5799..2ff5450a0b 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -4,7 +4,10 @@ "version": "0.1.1-alpha.6", "private": false, "publishConfig": { - "access": "public" + "access": "public", + "main": "dist/index.cjs.js", + "module": "dist/index.esm.js", + "types": "dist/index.d.ts" }, "homepage": "https://backstage.io", "repository": { diff --git a/packages/core-api/package.json b/packages/core-api/package.json index 39a776cf2b..c91a96ab31 100644 --- a/packages/core-api/package.json +++ b/packages/core-api/package.json @@ -4,7 +4,9 @@ "version": "0.1.1-alpha.6", "private": false, "publishConfig": { - "access": "public" + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" }, "homepage": "https://backstage.io", "repository": { diff --git a/packages/core/package.json b/packages/core/package.json index 11fd149f0c..6233f27065 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -4,7 +4,9 @@ "version": "0.1.1-alpha.6", "private": false, "publishConfig": { - "access": "public" + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" }, "homepage": "https://backstage.io", "repository": { diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index ab595ea9a7..eea0956a8b 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -4,7 +4,9 @@ "version": "0.1.1-alpha.6", "private": false, "publishConfig": { - "access": "public" + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" }, "homepage": "https://backstage.io", "repository": { diff --git a/packages/test-utils-core/package.json b/packages/test-utils-core/package.json index 1ebe1bf072..b1ef87729d 100644 --- a/packages/test-utils-core/package.json +++ b/packages/test-utils-core/package.json @@ -4,7 +4,9 @@ "version": "0.1.1-alpha.6", "private": false, "publishConfig": { - "access": "public" + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" }, "homepage": "https://backstage.io", "repository": { diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 136b6d6854..2a9320ee63 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -4,7 +4,9 @@ "version": "0.1.1-alpha.6", "private": false, "publishConfig": { - "access": "public" + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" }, "homepage": "https://backstage.io", "repository": { diff --git a/packages/theme/package.json b/packages/theme/package.json index a5d552a660..501ef6473e 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -4,7 +4,9 @@ "version": "0.1.1-alpha.6", "private": false, "publishConfig": { - "access": "public" + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" }, "homepage": "https://backstage.io", "repository": { diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 0cdc5d2618..5180406176 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -6,6 +6,11 @@ "types": "src/index.ts", "license": "Apache-2.0", "private": true, + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, "scripts": { "build": "backstage-cli plugin:build", "start": "backstage-cli plugin:serve", diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index bbcac8e9eb..d58ea6b406 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -6,6 +6,11 @@ "types": "src/index.ts", "license": "Apache-2.0", "private": true, + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, "proxy": { "/circleci/api": { "target": "https://circleci.com/api/v1.1", diff --git a/plugins/explore/package.json b/plugins/explore/package.json index 36e43a96e4..400d212e69 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -6,6 +6,11 @@ "types": "src/index.ts", "license": "Apache-2.0", "private": true, + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, "scripts": { "build": "backstage-cli plugin:build", "lint": "backstage-cli lint", diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index a3fee6e217..d4141aa367 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -4,7 +4,9 @@ "version": "0.1.1-alpha.6", "private": false, "publishConfig": { - "access": "public" + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" }, "homepage": "https://github.com/spotify/backstage/tree/master/plugins/graphiql#readme", "repository": { diff --git a/plugins/home-page/package.json b/plugins/home-page/package.json index fa1236861c..54144cefe3 100644 --- a/plugins/home-page/package.json +++ b/plugins/home-page/package.json @@ -6,6 +6,11 @@ "types": "src/index.ts", "license": "Apache-2.0", "private": true, + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, "scripts": { "build": "backstage-cli plugin:build", "start": "backstage-cli plugin:serve", diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index d8e2b53ace..fce604b609 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -6,6 +6,11 @@ "types": "src/index.ts", "license": "Apache-2.0", "private": true, + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, "scripts": { "build": "backstage-cli plugin:build", "lint": "backstage-cli lint", diff --git a/plugins/register-component/package.json b/plugins/register-component/package.json index 053af6bb51..ac03939eef 100644 --- a/plugins/register-component/package.json +++ b/plugins/register-component/package.json @@ -6,6 +6,11 @@ "types": "src/index.ts", "license": "Apache-2.0", "private": true, + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, "scripts": { "build": "backstage-cli plugin:build", "start": "backstage-cli plugin:serve", diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 7f453fde48..9b2f214afe 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -6,6 +6,11 @@ "types": "src/index.ts", "license": "Apache-2.0", "private": true, + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, "scripts": { "build": "backstage-cli plugin:build", "start": "backstage-cli plugin:serve", diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index 11decb4087..f539afa886 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -6,6 +6,11 @@ "types": "src/index.ts", "license": "Apache-2.0", "private": true, + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, "scripts": { "build": "backstage-cli plugin:build", "start": "backstage-cli plugin:serve", diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index 22568f8b97..5327ce7cfb 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -7,7 +7,9 @@ "license": "Apache-2.0", "private": false, "publishConfig": { - "access": "public" + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" }, "scripts": { "build": "backstage-cli plugin:build", diff --git a/plugins/welcome/package.json b/plugins/welcome/package.json index b05ef1145f..6debcc9c80 100644 --- a/plugins/welcome/package.json +++ b/plugins/welcome/package.json @@ -6,6 +6,11 @@ "types": "src/index.ts", "private": true, "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, "scripts": { "build": "backstage-cli plugin:build", "lint": "backstage-cli lint", From 75e91b2c82e791f0baad6da2034b3f8ddd48fb4d Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 5 Jun 2020 00:37:33 +0200 Subject: [PATCH 3/7] packages/cli: support dynamic imports of package code --- packages/cli/src/lib/packager/config.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/lib/packager/config.ts b/packages/cli/src/lib/packager/config.ts index aaecd4a148..bbc3f77916 100644 --- a/packages/cli/src/lib/packager/config.ts +++ b/packages/cli/src/lib/packager/config.ts @@ -53,13 +53,17 @@ export const makeConfigs = async ( if (options.outputs.has(Output.cjs)) { output.push({ - file: 'dist/index.cjs.js', + dir: 'dist', + entryFileNames: 'index.cjs.js', + chunkFileNames: 'cjs/[name]-[hash].js', format: 'commonjs', }); } if (options.outputs.has(Output.esm)) { output.push({ - file: 'dist/index.esm.js', + dir: 'dist', + entryFileNames: 'index.esm.js', + chunkFileNames: 'esm/[name]-[hash].js', format: 'module', }); } @@ -67,6 +71,7 @@ export const makeConfigs = async ( configs.push({ input: 'src/index.ts', output, + preserveEntrySignatures: 'strict', plugins: [ peerDepsExternal({ includeDependencies: true, From 576c8b07abc3beeece07bb064d7e5d477b5b658a Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 5 Jun 2020 01:16:49 +0200 Subject: [PATCH 4/7] packages/cli: always treat nodejs builtins as external, bit disallow infrontend code --- packages/cli/.eslintrc.js | 2 +- packages/cli/config/eslint.js | 1 + packages/cli/src/lib/packager/config.ts | 1 + packages/config-loader/.eslintrc.js | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/cli/.eslintrc.js b/packages/cli/.eslintrc.js index 4ae4e8d91b..69bec6cd2a 100644 --- a/packages/cli/.eslintrc.js +++ b/packages/cli/.eslintrc.js @@ -1,5 +1,5 @@ module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], + extends: [require.resolve('@backstage/cli/config/eslint.backend')], ignorePatterns: ['templates/**'], rules: { 'no-console': 0, diff --git a/packages/cli/config/eslint.js b/packages/cli/config/eslint.js index 922867ea5a..9c461a1b24 100644 --- a/packages/cli/config/eslint.js +++ b/packages/cli/config/eslint.js @@ -67,6 +67,7 @@ module.exports = { name: '@material-ui/icons', message: "Please import '@material-ui/icons/' instead.", }, + ...require('module').builtinModules, ], }, ], diff --git a/packages/cli/src/lib/packager/config.ts b/packages/cli/src/lib/packager/config.ts index bbc3f77916..9d60fa09f4 100644 --- a/packages/cli/src/lib/packager/config.ts +++ b/packages/cli/src/lib/packager/config.ts @@ -72,6 +72,7 @@ export const makeConfigs = async ( input: 'src/index.ts', output, preserveEntrySignatures: 'strict', + external: require('module').builtinModules, plugins: [ peerDepsExternal({ includeDependencies: true, diff --git a/packages/config-loader/.eslintrc.js b/packages/config-loader/.eslintrc.js index 13573efa9c..16a033dbc6 100644 --- a/packages/config-loader/.eslintrc.js +++ b/packages/config-loader/.eslintrc.js @@ -1,3 +1,3 @@ module.exports = { - extends: [require.resolve('@backstage/cli/config/eslint')], + extends: [require.resolve('@backstage/cli/config/eslint.backend')], }; From 8edc391c06e3811416a00c17da2a636a98464955 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 5 Jun 2020 01:20:00 +0200 Subject: [PATCH 5/7] packages/cli: clean dist dir before building --- packages/cli/src/lib/packager/packager.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/cli/src/lib/packager/packager.ts b/packages/cli/src/lib/packager/packager.ts index 0c41d0f767..65e33bcb7a 100644 --- a/packages/cli/src/lib/packager/packager.ts +++ b/packages/cli/src/lib/packager/packager.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import fs from 'fs-extra'; import { rollup, RollupOptions } from 'rollup'; import chalk from 'chalk'; import { relative as relativePath } from 'path'; @@ -83,5 +84,6 @@ async function build(config: RollupOptions) { export const buildPackage = async (options: BuildOptions) => { const configs = await makeConfigs(options); + await fs.remove(paths.resolveTarget('dist')); await Promise.all(configs.map(build)); }; From f4a75ee650f440f533b94eac3a8ae20582ac0857 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 5 Jun 2020 01:21:30 +0200 Subject: [PATCH 6/7] packages/cli: use cli to build cli --- packages/cli/bin/backstage-cli | 2 +- packages/cli/package.json | 4 +-- packages/cli/src/index.ts | 55 ++++++++++++++++++++-------------- 3 files changed, 35 insertions(+), 26 deletions(-) diff --git a/packages/cli/bin/backstage-cli b/packages/cli/bin/backstage-cli index 15b97d7063..adfaa5d7c1 100755 --- a/packages/cli/bin/backstage-cli +++ b/packages/cli/bin/backstage-cli @@ -21,7 +21,7 @@ const path = require('path'); const isLocal = require('fs').existsSync(path.resolve(__dirname, '../src')); if (!isLocal || process.env.BACKSTAGE_E2E_CLI_TEST) { - require('../dist'); + require('..'); } else { require('ts-node').register({ project: path.resolve(__dirname, '../tsconfig.build.json'), diff --git a/packages/cli/package.json b/packages/cli/package.json index 9cf60c0c4d..5a7aa1d8cf 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -16,9 +16,9 @@ "backstage" ], "license": "Apache-2.0", - "main": "dist/index.js", + "main": "dist/index.cjs.js", "scripts": { - "build": "backstage-cli build-cache -- tsc --project tsconfig.build.json", + "build": "backstage-cli build --outputs cjs", "lint": "backstage-cli lint", "test": "backstage-cli test", "test:e2e": "node e2e-test/cli-e2e-test.js", diff --git a/packages/cli/src/index.ts b/packages/cli/src/index.ts index 8288f776e1..a0302c4713 100644 --- a/packages/cli/src/index.ts +++ b/packages/cli/src/index.ts @@ -25,93 +25,101 @@ const main = (argv: string[]) => { program .command('create-app') .description('Creates a new app in a new directory') - .action(actionHandler(() => require('./commands/create-app/createApp'))); + .action( + lazyAction(() => import('./commands/create-app/createApp'), 'default'), + ); program .command('app:build') .description('Build an app for a production release') .option('--stats', 'Write bundle stats to output directory') - .action(actionHandler(() => require('./commands/app/build'))); + .action(lazyAction(() => import('./commands/app/build'), 'default')); program .command('app:serve') .description('Serve an app for local development') .option('--check', 'Enable type checking and linting') - .action(actionHandler(() => require('./commands/app/serve'))); + .action(lazyAction(() => import('./commands/app/serve'), 'default')); program .command('app:diff') .option('--check', 'Fail if changes are required') .option('--yes', 'Apply all changes') .description('Diff an existing app with the creation template') - .action(actionHandler(() => require('./commands/app/diff'))); + .action(lazyAction(() => import('./commands/app/diff'), 'default')); program .command('create-plugin') .description('Creates a new plugin in the current repository') .action( - actionHandler(() => require('./commands/create-plugin/createPlugin')), + lazyAction( + () => import('./commands/create-plugin/createPlugin'), + 'default', + ), ); program .command('remove-plugin') .description('Removes plugin in the current repository') .action( - actionHandler(() => require('./commands/remove-plugin/removePlugin')), + lazyAction( + () => import('./commands/remove-plugin/removePlugin'), + 'default', + ), ); program .command('plugin:build') .description('Build a plugin') - .action(actionHandler(() => require('./commands/plugin/build'))); + .action(lazyAction(() => import('./commands/plugin/build'), 'default')); program .command('plugin:serve') .description('Serves the dev/ folder of a plugin') .option('--check', 'Enable type checking and linting') - .action(actionHandler(() => require('./commands/plugin/serve'))); + .action(lazyAction(() => import('./commands/plugin/serve'), 'default')); program .command('plugin:diff') .option('--check', 'Fail if changes are required') .option('--yes', 'Apply all changes') .description('Diff an existing plugin with the creation template') - .action(actionHandler(() => require('./commands/plugin/diff'))); + .action(lazyAction(() => import('./commands/plugin/diff'), 'default')); program .command('build') .description('Build a package for publishing') .option('--outputs ', 'List of formats to output [types,cjs,esm]') - .action(actionHandler(() => require('./commands/build'))); + .action(lazyAction(() => import('./commands/build'), 'default')); program .command('lint') .option('--fix', 'Attempt to automatically fix violations') .description('Lint a package') - .action(actionHandler(() => require('./commands/lint'))); + .action(lazyAction(() => import('./commands/lint'), 'default')); program .command('test') .allowUnknownOption(true) // Allows the command to run, but we still need to parse raw args .helpOption(', --backstage-cli-help') // Let Jest handle help .description('Run tests, forwarding args to Jest, defaulting to watch mode') - .action(actionHandler(() => require('./commands/testCommand'))); + .action(lazyAction(() => import('./commands/testCommand'), 'default')); program .command('prepack') .description('Prepares a package for packaging before publishing') - .action(actionHandler(() => require('./commands/pack').pre)); + .action(lazyAction(() => import('./commands/pack'), 'pre')); program .command('postpack') .description('Restores the changes made by the prepack command') - .action(actionHandler(() => require('./commands/pack').post)); + .action(lazyAction(() => import('./commands/pack'), 'post')); program .command('watch-deps') .option('--build', 'Build all dependencies on startup') .description('Watch all dependencies while running another command') - .action(actionHandler(() => require('./commands/watch-deps'))); + .action(lazyAction(() => import('./commands/watch-deps'), 'default')); program .command('build-cache') @@ -128,12 +136,12 @@ const main = (argv: string[]) => { 'Cache dir', '/node_modules/.cache/backstage-builds', ) - .action(actionHandler(() => require('./commands/build-cache'))); + .action(lazyAction(() => import('./commands/build-cache'), 'default')); program .command('clean') .description('Delete cache directories') - .action(actionHandler(() => require('./commands/clean/clean'))); + .action(lazyAction(() => import('./commands/clean/clean'), 'default')); program.on('command:*', () => { console.log(); @@ -153,15 +161,16 @@ const main = (argv: string[]) => { }; // Wraps an action function so that it always exits and handles errors -function actionHandler( - actionRequireFunc: - | (() => { default(...args: T): Promise }) - | (() => (...args: T) => Promise), +function lazyAction( + actionRequireFunc: () => Promise< + { [name in Export]: (...args: T) => Promise } + >, + exportName: Export, ): (...args: T) => Promise { return async (...args: T) => { try { - const ret = actionRequireFunc(); - const actionFunc = typeof ret === 'function' ? ret : ret.default; + const module = await actionRequireFunc(); + const actionFunc = module[exportName]; await actionFunc(...args); process.exit(0); } catch (error) { From 1bf9cffd1e0c0c24a93e655569d0303d62c2dff4 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 5 Jun 2020 10:23:20 +0200 Subject: [PATCH 7/7] packages/cli: remove separate tsconfig --- packages/cli/bin/backstage-cli | 4 +++- packages/cli/tsconfig.build.json | 11 ----------- 2 files changed, 3 insertions(+), 12 deletions(-) delete mode 100644 packages/cli/tsconfig.build.json diff --git a/packages/cli/bin/backstage-cli b/packages/cli/bin/backstage-cli index adfaa5d7c1..2b445ca9af 100755 --- a/packages/cli/bin/backstage-cli +++ b/packages/cli/bin/backstage-cli @@ -24,8 +24,10 @@ if (!isLocal || process.env.BACKSTAGE_E2E_CLI_TEST) { require('..'); } else { require('ts-node').register({ - project: path.resolve(__dirname, '../tsconfig.build.json'), transpileOnly: true, + compilerOptions: { + module: 'CommonJS', + }, }); require('../src'); diff --git a/packages/cli/tsconfig.build.json b/packages/cli/tsconfig.build.json deleted file mode 100644 index ae42e652e6..0000000000 --- a/packages/cli/tsconfig.build.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "./config/tsconfig.json", - "include": ["src"], - "exclude": ["**/*.test.*"], - "compilerOptions": { - "outDir": "dist", - "emitDeclarationOnly": false, - "removeComments": true, - "module": "CommonJS" - } -}