diff --git a/src/utils/run-build.mjs b/src/utils/run-build.mjs index da80f829105..e1f6f8ce6bd 100644 --- a/src/utils/run-build.mjs +++ b/src/utils/run-build.mjs @@ -110,7 +110,7 @@ export const runNetlifyBuild = async ({ command, env = {}, options, settings, ti } // Run Netlify Build using the main entry point. - const { success } = await buildSite(buildSiteOptions) + const { netlifyConfig, success } = await buildSite(buildSiteOptions) if (!success) { error('Could not start local server due to a build error') @@ -120,10 +120,14 @@ export const runNetlifyBuild = async ({ command, env = {}, options, settings, ti // Start the dev server, forcing the usage of a static server as opposed to // the framework server. - await devCommand({ + const settingsOverrides = { command: undefined, useStaticServer: true, - }) + } + if (!options.dir && netlifyConfig?.build?.publish) { + settingsOverrides.dist = netlifyConfig.build.publish + } + await devCommand(settingsOverrides) return { configPath: tempConfigPath } } diff --git a/tests/integration/__fixtures__/plugin-changing-publish-dir/dist/index.html b/tests/integration/__fixtures__/plugin-changing-publish-dir/dist/index.html new file mode 100644 index 00000000000..c57eff55ebc --- /dev/null +++ b/tests/integration/__fixtures__/plugin-changing-publish-dir/dist/index.html @@ -0,0 +1 @@ +Hello World! \ No newline at end of file diff --git a/tests/integration/__fixtures__/plugin-changing-publish-dir/netlify.toml b/tests/integration/__fixtures__/plugin-changing-publish-dir/netlify.toml new file mode 100644 index 00000000000..7caee501c35 --- /dev/null +++ b/tests/integration/__fixtures__/plugin-changing-publish-dir/netlify.toml @@ -0,0 +1,2 @@ +[[plugins]] + package="/plugin" \ No newline at end of file diff --git a/tests/integration/__fixtures__/plugin-changing-publish-dir/plugin/index.js b/tests/integration/__fixtures__/plugin-changing-publish-dir/plugin/index.js new file mode 100644 index 00000000000..b70100e91f5 --- /dev/null +++ b/tests/integration/__fixtures__/plugin-changing-publish-dir/plugin/index.js @@ -0,0 +1,5 @@ +export default { + onBuild({netlifyConfig}){ + netlifyConfig.build.publish = "dist" + } +} \ No newline at end of file diff --git a/tests/integration/__fixtures__/plugin-changing-publish-dir/plugin/manifest.yml b/tests/integration/__fixtures__/plugin-changing-publish-dir/plugin/manifest.yml new file mode 100644 index 00000000000..49a980b9bb5 --- /dev/null +++ b/tests/integration/__fixtures__/plugin-changing-publish-dir/plugin/manifest.yml @@ -0,0 +1 @@ +name: change-publish-dir \ No newline at end of file diff --git a/tests/integration/__fixtures__/plugin-changing-publish-dir/plugin/package.json b/tests/integration/__fixtures__/plugin-changing-publish-dir/plugin/package.json new file mode 100644 index 00000000000..bb34440a365 --- /dev/null +++ b/tests/integration/__fixtures__/plugin-changing-publish-dir/plugin/package.json @@ -0,0 +1 @@ +{ "type": "module" } \ No newline at end of file diff --git a/tests/integration/commands/dev/serve.test.ts b/tests/integration/commands/dev/serve.test.ts new file mode 100644 index 00000000000..da64388b276 --- /dev/null +++ b/tests/integration/commands/dev/serve.test.ts @@ -0,0 +1,10 @@ +import { expect, test } from 'vitest' + +import { FixtureTestContext, setupFixtureTests } from '../../utils/fixture.js' + +setupFixtureTests('plugin-changing-publish-dir', { devServer: { serve: true } }, () => { + test('ntl serve should respect plugins changing publish dir', async ({ devServer }) => { + const response = await fetch(`http://localhost:${devServer.port}/`) + expect(response.status).toBe(200) + }) +}) diff --git a/tests/integration/utils/fixture.ts b/tests/integration/utils/fixture.ts index 74e1e836b1c..1a5a01e9b71 100644 --- a/tests/integration/utils/fixture.ts +++ b/tests/integration/utils/fixture.ts @@ -27,7 +27,7 @@ export interface FixtureTestContext { type LifecycleHook = (context: FixtureTestContext) => Promise | void export interface FixtureOptions { - devServer?: boolean + devServer?: boolean | { serve?: boolean } mockApi?: MockApiOptions /** * Executed after fixture setup, but before tests run @@ -148,6 +148,7 @@ export async function setupFixtureTests( if (options.devServer) { devServer = await startDevServer({ + serve: typeof options.devServer === 'object' && options.devServer.serve, cwd: fixture.directory, offline: !mockApi, args: ['--country', 'DE'],