From 5dbea2e16facac8dcea00c58f789e8f875fabc5d Mon Sep 17 00:00:00 2001 From: Colum Ferry Date: Wed, 16 Oct 2024 13:32:42 +0100 Subject: [PATCH] fix(vite): add vite temp files to gitignore #28371 (#28443) ## Current Behavior When Vite's tries to handle a `.ts` config file it builds it to JS with a `.timestamp-` suffix. These files are still picked up by Nx when they shouldn't as it's a temp file (https://github.com/vitejs/vite/issues/13267). ## Expected Behavior Add these temp files to gitignore to prevent processing. ## Related Issue(s) Fixes #28371 --- .../__snapshots__/application.spec.ts.snap | 12 +++---- .../vite/src/generators/init/init.spec.ts | 16 +++++++++ packages/vite/src/generators/init/init.ts | 2 ++ .../add-vite-temp-files-to-git-ignore.spec.ts | 33 +++++++++++++++++++ .../add-vite-temp-files-to-git-ignore.ts | 6 ++++ .../utils/add-vite-temp-files-to-gitignore.ts | 16 +++++++++ .../__snapshots__/application.spec.ts.snap | 1 + 7 files changed, 80 insertions(+), 6 deletions(-) create mode 100644 packages/vite/src/migrations/update-20-0-2/add-vite-temp-files-to-git-ignore.spec.ts create mode 100644 packages/vite/src/migrations/update-20-0-2/add-vite-temp-files-to-git-ignore.ts create mode 100644 packages/vite/src/utils/add-vite-temp-files-to-gitignore.ts diff --git a/packages/nuxt/src/generators/application/__snapshots__/application.spec.ts.snap b/packages/nuxt/src/generators/application/__snapshots__/application.spec.ts.snap index 8f547ff7945ea..7b5070c264ac4 100644 --- a/packages/nuxt/src/generators/application/__snapshots__/application.spec.ts.snap +++ b/packages/nuxt/src/generators/application/__snapshots__/application.spec.ts.snap @@ -1,13 +1,13 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`app generated files content - as-provided - my-app general application should add nuxt entries in .gitignore 1`] = ` -" -# Nuxt dev/build outputs +"# Nuxt dev/build outputs .output .data .nuxt .nitro -.cache" +.cache +**/vite.config.{js,ts,mjs,mts,cjs,cts}.timestamp*" `; exports[`app generated files content - as-provided - my-app general application should add the nuxt and vitest plugins 1`] = ` @@ -364,13 +364,13 @@ export default defineNuxtConfig({ `; exports[`app generated files content - as-provided - myApp general application should add nuxt entries in .gitignore 1`] = ` -" -# Nuxt dev/build outputs +"# Nuxt dev/build outputs .output .data .nuxt .nitro -.cache" +.cache +**/vite.config.{js,ts,mjs,mts,cjs,cts}.timestamp*" `; exports[`app generated files content - as-provided - myApp general application should add the nuxt and vitest plugins 1`] = ` diff --git a/packages/vite/src/generators/init/init.spec.ts b/packages/vite/src/generators/init/init.spec.ts index b65057323dfdd..43baee1a01def 100644 --- a/packages/vite/src/generators/init/init.spec.ts +++ b/packages/vite/src/generators/init/init.spec.ts @@ -127,4 +127,20 @@ describe('@nx/vite:init', () => { " `); }); + + it(`should not add multiple instances of the same vite temp file glob to gitignore`, async () => { + // ARRANGE + tree.write( + '.gitignore', + '**/vite.config.{js,ts,mjs,mts,cjs,cts}.timestamp*' + ); + + // ACT + await initGenerator(tree, {}); + + // ASSERT + expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot( + `"**/vite.config.{js,ts,mjs,mts,cjs,cts}.timestamp*"` + ); + }); }); diff --git a/packages/vite/src/generators/init/init.ts b/packages/vite/src/generators/init/init.ts index b5d3dc91c071d..4d1e5922e631b 100644 --- a/packages/vite/src/generators/init/init.ts +++ b/packages/vite/src/generators/init/init.ts @@ -13,6 +13,7 @@ import { setupPathsPlugin } from '../setup-paths-plugin/setup-paths-plugin'; import { createNodesV2 } from '../../plugins/plugin'; import { InitGeneratorSchema } from './schema'; import { checkDependenciesInstalled, moveToDevDependencies } from './lib/utils'; +import { addViteTempFilesToGitIgnore } from '../../utils/add-vite-temp-files-to-gitignore'; export function updateNxJsonSettings(tree: Tree) { const nxJson = readNxJson(tree); @@ -83,6 +84,7 @@ export async function initGeneratorInternal( } updateNxJsonSettings(tree); + addViteTempFilesToGitIgnore(tree); if (schema.setupPathsPlugin) { await setupPathsPlugin(tree, { skipFormat: true }); diff --git a/packages/vite/src/migrations/update-20-0-2/add-vite-temp-files-to-git-ignore.spec.ts b/packages/vite/src/migrations/update-20-0-2/add-vite-temp-files-to-git-ignore.spec.ts new file mode 100644 index 0000000000000..aae76676cb133 --- /dev/null +++ b/packages/vite/src/migrations/update-20-0-2/add-vite-temp-files-to-git-ignore.spec.ts @@ -0,0 +1,33 @@ +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; +import addViteTempFilesToGitIgnore from './add-vite-temp-files-to-git-ignore'; + +describe('addViteTempFilesToGitIgnore', () => { + it('should update an existing .gitignore file to add the glob correctly', () => { + // ARRANGE + const tree = createTreeWithEmptyWorkspace(); + tree.write('.gitignore', '.idea'); + + // ACT + addViteTempFilesToGitIgnore(tree); + + // ASSERT + expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot(` + ".idea + **/vite.config.{js,ts,mjs,mts,cjs,cts}.timestamp*" + `); + }); + + it('should write a new .gitignore file to add the glob correctly', () => { + // ARRANGE + const tree = createTreeWithEmptyWorkspace(); + tree.delete('.gitignore'); + + // ACT + addViteTempFilesToGitIgnore(tree); + + // ASSERT + expect(tree.read('.gitignore', 'utf-8')).toMatchInlineSnapshot( + `"**/vite.config.{js,ts,mjs,mts,cjs,cts}.timestamp*"` + ); + }); +}); diff --git a/packages/vite/src/migrations/update-20-0-2/add-vite-temp-files-to-git-ignore.ts b/packages/vite/src/migrations/update-20-0-2/add-vite-temp-files-to-git-ignore.ts new file mode 100644 index 0000000000000..f72fcbf7112f3 --- /dev/null +++ b/packages/vite/src/migrations/update-20-0-2/add-vite-temp-files-to-git-ignore.ts @@ -0,0 +1,6 @@ +import { Tree } from '@nx/devkit'; +import { addViteTempFilesToGitIgnore as _addViteTempFilesToGitIgnore } from '../../utils/add-vite-temp-files-to-gitignore'; + +export default function addViteTempFilesToGitIgnore(tree: Tree) { + _addViteTempFilesToGitIgnore(tree); +} diff --git a/packages/vite/src/utils/add-vite-temp-files-to-gitignore.ts b/packages/vite/src/utils/add-vite-temp-files-to-gitignore.ts new file mode 100644 index 0000000000000..a84c07e79b3e7 --- /dev/null +++ b/packages/vite/src/utils/add-vite-temp-files-to-gitignore.ts @@ -0,0 +1,16 @@ +import { stripIndents, Tree } from '@nx/devkit'; + +export function addViteTempFilesToGitIgnore(tree: Tree) { + let newGitIgnoreContents = `**/vite.config.{js,ts,mjs,mts,cjs,cts}.timestamp*`; + if (tree.exists('.gitignore')) { + const gitIgnoreContents = tree.read('.gitignore', 'utf-8'); + if (!gitIgnoreContents.includes(newGitIgnoreContents)) { + newGitIgnoreContents = stripIndents`${gitIgnoreContents} + ${newGitIgnoreContents}`; + + tree.write('.gitignore', newGitIgnoreContents); + } + } else { + tree.write('.gitignore', newGitIgnoreContents); + } +} diff --git a/packages/vue/src/generators/application/__snapshots__/application.spec.ts.snap b/packages/vue/src/generators/application/__snapshots__/application.spec.ts.snap index 08a063853b107..65a1586fb0cc2 100644 --- a/packages/vue/src/generators/application/__snapshots__/application.spec.ts.snap +++ b/packages/vue/src/generators/application/__snapshots__/application.spec.ts.snap @@ -346,6 +346,7 @@ exports[`application generator should set up project correctly with given option [ ".eslintignore", ".eslintrc.json", + ".gitignore", ".prettierignore", ".prettierrc", ".vscode/extensions.json",