@strapi/strapi
Version:
An open source headless CMS solution to create and manage your own API. It provides a powerful dashboard and features to make your life easier. Databases supported: MySQL, MariaDB, PostgreSQL, SQLite
1 lines • 26.5 kB
Source Map (JSON)
{"version":3,"file":"develop.mjs","sources":["../../../src/node/develop.ts"],"sourcesContent":["import fs from 'node:fs/promises';\nimport path from 'node:path';\nimport cluster from 'node:cluster';\n\nimport type chokidarType from 'chokidar';\nimport type { createStrapi as CreateStrapi } from '@strapi/core';\nimport type { CLIContext } from '../cli/types';\nimport { handleAdminDependencies } from './core/ensure-admin-dependencies';\nimport { getTimer, prettyTime, type TimeMeasurer } from './core/timer';\nimport type { WebpackWatcher } from './webpack/watch';\nimport type { ViteWatcher } from './vite/watch';\nimport type { Logger } from '../cli/utils/logger';\n\n// Lazy: worker-only deps; primary cluster process should not pay for them\nconst lazy = <T>(spec: string): (() => T) => {\n let cached: T | undefined;\n return (): T => {\n if (cached === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n cached = require(spec);\n }\n return cached as T;\n };\n};\nconst tsUtils = lazy<typeof import('@strapi/typescript-utils')>('@strapi/typescript-utils');\nconst utils = lazy<typeof import('@strapi/utils')>('@strapi/utils');\nconst chokidar = lazy<typeof chokidarType>('chokidar');\nconst core = lazy<typeof import('@strapi/core')>('@strapi/core');\nconst buildCtx = lazy<typeof import('./create-build-context')>('./create-build-context');\nconst staticFs = lazy<typeof import('./staticFiles')>('./staticFiles');\n\ninterface DevelopOptions extends CLIContext {\n /**\n * Which bundler to use for building.\n *\n * @default webpack\n */\n bundler?: 'webpack' | 'vite';\n polling?: boolean;\n open?: boolean;\n watchAdmin?: boolean;\n buildAdmin?: boolean;\n /**\n * Auto-install missing admin dependencies\n *\n * @default true\n */\n installDeps?: boolean;\n}\n\n// This method removes all non-admin build files from the dist directory\nconst cleanupDistDirectory = async ({\n tsconfig,\n logger,\n timer,\n}: Pick<DevelopOptions, 'tsconfig' | 'logger'> & { timer: TimeMeasurer }) => {\n const distDir = tsconfig?.config?.options?.outDir;\n\n if (\n !distDir || // we don't have a dist dir\n (await fs\n .access(distDir)\n .then(() => false)\n .catch(() => true)) // it doesn't exist -- if it does but no access, that will be caught later\n ) {\n return;\n }\n\n const timerName = `cleaningDist${Date.now()}`;\n timer.start(timerName);\n const cleaningSpinner = logger.spinner(`Cleaning dist dir ${distDir}`).start();\n\n try {\n const dirContent = await fs.readdir(distDir);\n const validFilenames = dirContent\n // Ignore the admin build folder and the TypeScript incremental cache\n .filter((filename) => filename !== 'build' && !filename.endsWith('.tsbuildinfo'));\n for (const filename of validFilenames) {\n await fs.rm(path.resolve(distDir, filename), { recursive: true });\n }\n } catch (err: unknown) {\n const generatingDuration = timer.end(timerName);\n cleaningSpinner.text = `Error cleaning dist dir: ${err} (${prettyTime(generatingDuration)})`;\n cleaningSpinner?.fail();\n return;\n }\n\n const generatingDuration = timer.end(timerName);\n cleaningSpinner.text = `Cleaning dist dir (${prettyTime(generatingDuration)})`;\n cleaningSpinner?.succeed();\n};\n\nconst develop = async ({\n cwd,\n polling,\n logger,\n tsconfig,\n watchAdmin,\n buildAdmin,\n installDeps = true,\n ...options\n}: DevelopOptions) => {\n const timer = getTimer();\n\n if (cluster.isPrimary) {\n const shouldContinue = await handleAdminDependencies({\n cwd,\n logger,\n installIfMissing: installDeps,\n });\n\n if (!shouldContinue) {\n return;\n }\n\n if (tsconfig?.config) {\n // Build without diagnostics in case schemas have changed\n await cleanupDistDirectory({ tsconfig, logger, timer });\n try {\n await tsUtils().compile(cwd, { configOptions: { ignoreDiagnostics: true } });\n } catch (err: unknown) {\n logger.error(`Error during initial TypeScript compilation: ${(err as Error).message}`);\n // We don't return here because we want to attempt to start the server even if the initial compilation fails, as it can be fixed while the server is running\n }\n }\n\n /**\n * IF we're not watching the admin we're going to build it, this makes\n * sure that at least the admin is built for users & they can interact\n * with the application.\n */\n if (!watchAdmin && buildAdmin) {\n timer.start('createBuildContext');\n const contextSpinner = logger.spinner(`Building build context`).start();\n console.log('');\n\n const ctx = await buildCtx().createBuildContext({\n cwd,\n logger,\n tsconfig,\n options,\n });\n const contextDuration = timer.end('createBuildContext');\n contextSpinner.text = `Building build context (${prettyTime(contextDuration)})`;\n contextSpinner.succeed();\n\n timer.start('creatingAdmin');\n const adminSpinner = logger.spinner(`Creating admin`).start();\n\n await staticFs().writeStaticClientFiles(ctx);\n\n if (ctx.bundler === 'webpack') {\n const { build: buildWebpack } = await import('./webpack/build');\n await buildWebpack(ctx);\n } else if (ctx.bundler === 'vite') {\n const { build: buildVite } = await import('./vite/build');\n await buildVite(ctx);\n }\n\n const adminDuration = timer.end('creatingAdmin');\n adminSpinner.text = `Creating admin (${prettyTime(adminDuration)})`;\n adminSpinner.succeed();\n }\n\n cluster.on('message', async (worker, message) => {\n switch (message) {\n case 'reload': {\n if (tsconfig?.config) {\n try {\n // Build without diagnostics in case schemas have changed\n await cleanupDistDirectory({ tsconfig, logger, timer });\n await tsUtils().compile(cwd, { configOptions: { ignoreDiagnostics: true } });\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n logger.error(`Error during TypeScript compilation on reload: ${message}`);\n process.exit(1);\n }\n }\n logger.debug('cluster has the reload message, sending the worker kill message');\n worker.send('kill');\n break;\n }\n case 'killed': {\n logger.debug('cluster has the killed message, forking the cluster');\n cluster.fork();\n break;\n }\n case 'stop': {\n process.exit(1);\n break;\n }\n default:\n break;\n }\n });\n\n cluster.fork();\n }\n\n if (cluster.isWorker) {\n timer.start('loadStrapi');\n const loadStrapiSpinner = logger.spinner(`Loading Strapi`).start();\n\n const strapi = core().createStrapi({\n appDir: cwd,\n distDir: tsconfig?.config.options.outDir ?? '',\n autoReload: true,\n serveAdminPanel: !watchAdmin,\n });\n\n /**\n * If we're watching the admin panel then we're going to attach the watcher\n * as a strapi middleware.\n */\n let bundleWatcher: WebpackWatcher | ViteWatcher | undefined;\n\n const strapiInstance = await strapi.load();\n\n const contextSpinner = logger.spinner(`Building build context`);\n const adminSpinner = logger.spinner(`Creating admin`);\n const generatingTsSpinner = logger.spinner(`Generating types`);\n const compilingTsSpinner = logger.spinner(`Compiling TS`);\n\n let watcherStarted = false;\n const ensureWatcher = () => {\n if (!watcherStarted) {\n watcherStarted = true;\n startWatcher(strapiInstance, cwd, polling ?? false, logger, bundleWatcher);\n }\n };\n\n try {\n if (watchAdmin) {\n timer.start('createBuildContext');\n contextSpinner.start();\n\n const ctx = await buildCtx().createBuildContext({\n cwd,\n logger,\n strapi,\n tsconfig,\n options,\n });\n const contextDuration = timer.end('createBuildContext');\n contextSpinner.text = `Building build context (${prettyTime(contextDuration)})`;\n contextSpinner.succeed();\n\n timer.start('creatingAdmin');\n adminSpinner.start();\n\n await staticFs().writeStaticClientFiles(ctx);\n\n if (ctx.bundler === 'webpack') {\n const { watch: watchWebpack } = await import('./webpack/watch');\n bundleWatcher = await watchWebpack(ctx);\n } else if (ctx.bundler === 'vite') {\n const { watch: watchVite } = await import('./vite/watch');\n bundleWatcher = await watchVite(ctx);\n }\n\n const adminDuration = timer.end('creatingAdmin');\n adminSpinner.text = `Creating admin (${prettyTime(adminDuration)})`;\n adminSpinner.succeed();\n }\n\n const loadStrapiDuration = timer.end('loadStrapi');\n loadStrapiSpinner.text = `Loading Strapi (${prettyTime(loadStrapiDuration)})`;\n loadStrapiSpinner.succeed();\n\n // For TS projects, type generation is a requirement for the develop command so that the server can restart\n // For JS projects, we respect the experimental autogenerate setting\n if (tsconfig?.config || strapi.config.get('typescript.autogenerate') !== false) {\n timer.start('generatingTS');\n generatingTsSpinner.start();\n\n await tsUtils().generators.generate({\n strapi: strapiInstance,\n pwd: cwd,\n rootDir: undefined,\n logger: { silent: true, debug: false },\n artifacts: { contentTypes: true, components: true },\n });\n\n const generatingDuration = timer.end('generatingTS');\n generatingTsSpinner.text = `Generating types (${prettyTime(generatingDuration)})`;\n generatingTsSpinner.succeed();\n }\n\n if (tsconfig?.config) {\n timer.start('compilingTS');\n compilingTsSpinner.start();\n\n await cleanupDistDirectory({ tsconfig, logger, timer });\n await tsUtils().compile(cwd, { configOptions: { ignoreDiagnostics: false } });\n\n const compilingDuration = timer.end('compilingTS');\n compilingTsSpinner.text = `Compiling TS (${prettyTime(compilingDuration)})`;\n compilingTsSpinner.succeed();\n }\n\n ensureWatcher();\n\n strapiInstance.start();\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n logger.error(`Error during development: ${message}`);\n\n if (loadStrapiSpinner.isSpinning) {\n loadStrapiSpinner.fail();\n }\n // Fail any spinners that were left running.\n if (contextSpinner.isSpinning) {\n contextSpinner.fail();\n }\n if (compilingTsSpinner.isSpinning) {\n compilingTsSpinner.fail();\n }\n if (adminSpinner.isSpinning) {\n adminSpinner.fail();\n }\n if (generatingTsSpinner.isSpinning) {\n generatingTsSpinner.fail();\n }\n\n ensureWatcher();\n }\n }\n};\n\nfunction startWatcher(\n strapiInstance: Awaited<ReturnType<typeof CreateStrapi>>,\n cwd: string,\n polling: boolean,\n logger: Logger,\n bundleWatcher?: WebpackWatcher | ViteWatcher\n) {\n const restart = async () => {\n if (strapiInstance.reload.isWatching && !strapiInstance.reload.isReloading) {\n strapiInstance.reload.isReloading = true;\n strapiInstance.reload();\n }\n };\n\n const watcher = chokidar()\n .watch(cwd, {\n ignoreInitial: true,\n usePolling: polling,\n ignored: [\n /(^|[/\\\\])\\../, // dot files\n /tmp/,\n '**/src/admin/**',\n '**/src/plugins/**/admin/**',\n '**/dist/src/plugins/test/admin/**',\n '**/documentation',\n '**/documentation/**',\n '**/node_modules',\n '**/node_modules/**',\n '**/plugins.json',\n '**/build',\n '**/build/**',\n '**/log',\n '**/log/**',\n '**/logs',\n '**/logs/**',\n '**/*.log',\n '**/index.html',\n '**/public',\n '**/public/**',\n strapiInstance.dirs.static.public,\n utils().strings.joinBy('/', strapiInstance.dirs.static.public, '**'),\n '**/*.db*',\n '**/exports/**',\n '**/dist/**',\n '**/*.d.ts',\n '**/.yalc/**',\n '**/yalc.lock',\n // TODO v6: watch only src folder by default, and flip this to watchIncludeFiles\n ...strapiInstance.config.get('admin.watchIgnoreFiles', []),\n ],\n })\n .on('add', (path) => {\n strapiInstance.log.info(`File created: ${path}`);\n restart();\n })\n .on('change', (path) => {\n strapiInstance.log.info(`File changed: ${path}`);\n restart();\n })\n .on('unlink', (path) => {\n strapiInstance.log.info(`File deleted: ${path}`);\n restart();\n });\n\n process.on('message', async (message) => {\n switch (message) {\n case 'kill': {\n logger.debug(\n 'child process has the kill message, destroying the strapi instance and sending the killed process message'\n );\n await watcher.close();\n\n await strapiInstance.destroy();\n\n if (bundleWatcher) {\n bundleWatcher.close();\n }\n process.send?.('killed');\n break;\n }\n default:\n break;\n }\n });\n}\n\nexport { develop };\nexport type { DevelopOptions };\n"],"names":["lazy","spec","cached","undefined","require","tsUtils","utils","chokidar","core","buildCtx","staticFs","cleanupDistDirectory","tsconfig","logger","timer","distDir","config","options","outDir","fs","access","then","catch","timerName","Date","now","start","cleaningSpinner","spinner","dirContent","readdir","validFilenames","filter","filename","endsWith","rm","path","resolve","recursive","err","generatingDuration","end","text","prettyTime","fail","succeed","develop","cwd","polling","watchAdmin","buildAdmin","installDeps","getTimer","cluster","isPrimary","shouldContinue","handleAdminDependencies","installIfMissing","compile","configOptions","ignoreDiagnostics","error","message","contextSpinner","console","log","ctx","createBuildContext","contextDuration","adminSpinner","writeStaticClientFiles","bundler","build","buildWebpack","buildVite","adminDuration","on","worker","Error","String","process","exit","debug","send","fork","isWorker","loadStrapiSpinner","strapi","createStrapi","appDir","autoReload","serveAdminPanel","bundleWatcher","strapiInstance","load","generatingTsSpinner","compilingTsSpinner","watcherStarted","ensureWatcher","startWatcher","watch","watchWebpack","watchVite","loadStrapiDuration","get","generators","generate","pwd","rootDir","silent","artifacts","contentTypes","components","compilingDuration","isSpinning","restart","reload","isWatching","isReloading","watcher","ignoreInitial","usePolling","ignored","dirs","static","public","strings","joinBy","info","close","destroy"],"mappings":"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"}