From af25ef75ce27841bf0e792033a327f70b549ebfa Mon Sep 17 00:00:00 2001 From: Haoqun Jiang Date: Fri, 21 Jun 2019 17:20:53 +0800 Subject: [PATCH] feat: make `injectImports` & `injectRootOptions` work for `.vue` files (#4168) closes #1702 --- packages/@vue/cli/__tests__/Generator.spec.js | 32 ++++++++++ packages/@vue/cli/lib/Generator.js | 26 ++++++-- .../cli/lib/util/codemods/injectImports.js | 29 +++++++++ .../cli/lib/util/codemods/injectOptions.js | 27 ++++++++ .../cli/lib/util/injectImportsAndOptions.js | 64 ------------------- packages/@vue/cli/lib/util/runCodemod.js | 6 ++ packages/@vue/cli/package.json | 1 + 7 files changed, 115 insertions(+), 70 deletions(-) create mode 100644 packages/@vue/cli/lib/util/codemods/injectImports.js create mode 100644 packages/@vue/cli/lib/util/codemods/injectOptions.js delete mode 100644 packages/@vue/cli/lib/util/injectImportsAndOptions.js create mode 100644 packages/@vue/cli/lib/util/runCodemod.js diff --git a/packages/@vue/cli/__tests__/Generator.spec.js b/packages/@vue/cli/__tests__/Generator.spec.js index 7e4e0cb274..6da53c4368 100644 --- a/packages/@vue/cli/__tests__/Generator.spec.js +++ b/packages/@vue/cli/__tests__/Generator.spec.js @@ -23,6 +23,19 @@ new Vue({ }).$mount('#app') `.trim()) fs.writeFileSync(path.resolve(templateDir, 'empty-entry.js'), `;`) +fs.writeFileSync(path.resolve(templateDir, 'hello.vue'), ` + + +`) // replace stubs fs.writeFileSync(path.resolve(templateDir, 'replace.js'), ` @@ -505,6 +518,25 @@ test('api: addEntryDuplicateImport', async () => { expect(fs.readFileSync('/main.js', 'utf-8')).toMatch(/^import foo from 'foo'\s+new Vue/) }) +test('api: injectImport for .vue files', async () => { + const generator = new Generator('/', { plugins: [ + { + id: 'test', + apply: api => { + api.injectImports('hello.vue', `import foo from 'foo'`) + api.render({ + 'hello.vue': path.join(templateDir, 'hello.vue') + }) + } + } + ] }) + + await generator.generate() + const content = fs.readFileSync('/hello.vue', 'utf-8') + expect(content).toMatch(/import foo from 'foo'/) + expect(content).toMatch(/