diff --git a/packages/@vue/cli/__tests__/mock-preset-with-readme/generator.js b/packages/@vue/cli/__tests__/mock-preset-with-readme/generator.js new file mode 100644 index 0000000000..9b25561f47 --- /dev/null +++ b/packages/@vue/cli/__tests__/mock-preset-with-readme/generator.js @@ -0,0 +1,5 @@ +module.exports = (api, options) => { + api.render(files => { + files['README.md'] = 'hello' + }) +} diff --git a/packages/@vue/cli/__tests__/mock-preset-with-readme/preset.json b/packages/@vue/cli/__tests__/mock-preset-with-readme/preset.json new file mode 100644 index 0000000000..63ec289edc --- /dev/null +++ b/packages/@vue/cli/__tests__/mock-preset-with-readme/preset.json @@ -0,0 +1,5 @@ +{ + "plugins": { + "@vue/cli-plugin-babel": {} + } +} diff --git a/packages/@vue/cli/__tests__/preset.spec.js b/packages/@vue/cli/__tests__/preset.spec.js index 5329976922..49fc8e90c8 100644 --- a/packages/@vue/cli/__tests__/preset.spec.js +++ b/packages/@vue/cli/__tests__/preset.spec.js @@ -85,3 +85,23 @@ test('should recognize generator/index.js in a local preset directory by async g expect(pkg.scripts).toHaveProperty('testasync') }) +test('should not override the README.md generated by plugins', async () => { + const cwd = path.resolve(__dirname, '../../../test') + const name = 'test-preset-readme' + + await create( + name, + { + force: true, + git: false, + cwd, + preset: path.resolve(__dirname, './mock-preset-with-readme') + } + ) + + const readme = await fs.readFile(path.resolve(cwd, name, 'README.md'), 'utf-8') + expect(readme).toBe('hello') + + const pkg = require(path.resolve(cwd, name, 'package.json')) + expect(pkg.devDependencies).toHaveProperty('@vue/cli-plugin-babel') +}) diff --git a/packages/@vue/cli/lib/Creator.js b/packages/@vue/cli/lib/Creator.js index 0ee06ec130..fbb664fe32 100644 --- a/packages/@vue/cli/lib/Creator.js +++ b/packages/@vue/cli/lib/Creator.js @@ -214,13 +214,15 @@ module.exports = class Creator extends EventEmitter { await cb() } - // generate README.md - stopSpinner() - log() - logWithSpinner('📄', 'Generating README.md...') - await writeFileTree(context, { - 'README.md': generateReadme(generator.pkg, packageManager) - }) + if (!generator.files['README.md']) { + // generate README.md + stopSpinner() + log() + logWithSpinner('📄', 'Generating README.md...') + await writeFileTree(context, { + 'README.md': generateReadme(generator.pkg, packageManager) + }) + } // generate a .npmrc file for pnpm, to persist the `shamefully-flatten` flag if (packageManager === 'pnpm') {