Skip to content

Commit ecb8c18

Browse files
haoqunjiangyyx990803
authored andcommitted
fix: support generator/index.js in local presets (#2263)
fixes #2172
1 parent b81d11e commit ecb8c18

File tree

6 files changed

+43
-3
lines changed

6 files changed

+43
-3
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module.exports = (api, options) => {
2+
api.render('./template', options)
3+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<%= ok %>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"plugins": {
3+
"@vue/cli-plugin-babel": {}
4+
}
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module.exports = [{
2+
type: 'confirm',
3+
name: 'ok',
4+
message: 'Are you ok?'
5+
}]

packages/@vue/cli/__tests__/preset.spec.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,29 @@ test('fetching local preset with prompts and generator', async () => {
3030
const pkg = require(path.resolve(cwd, name, 'package.json'))
3131
expect(pkg.devDependencies).toHaveProperty('@vue/cli-plugin-babel')
3232
})
33+
34+
test('should recognize generator/index.js in a local preset directory', async () => {
35+
const cwd = path.resolve(__dirname, '../../../test')
36+
const name = 'test-preset-template'
37+
38+
expectPrompts([{
39+
message: 'Are you ok',
40+
confirm: true
41+
}])
42+
43+
await create(
44+
name,
45+
{
46+
force: true,
47+
git: false,
48+
cwd,
49+
preset: path.resolve(__dirname, './mock-preset-with-template')
50+
}
51+
)
52+
53+
const testFile = await fs.readFile(path.resolve(cwd, name, 'test.js'), 'utf-8')
54+
expect(testFile).toBe('true\n')
55+
56+
const pkg = require(path.resolve(cwd, name, 'package.json'))
57+
expect(pkg.devDependencies).toHaveProperty('@vue/cli-plugin-babel')
58+
})

packages/@vue/cli/lib/util/loadPresetFromDir.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ module.exports = async function loadPresetFromDir (dir) {
88
}
99
const preset = await fs.readJson(presetPath)
1010

11-
// if the preset dir contains generator.js, we will inject it as a hidden
11+
// if the preset dir contains generator.js or generator/index.js, we will inject it as a hidden
1212
// plugin so it will be invoked by the generator.
13-
const generatorPath = path.join(dir, 'generator.js')
14-
if (fs.existsSync(generatorPath)) {
13+
const hasGenerator = fs.existsSync(path.join(dir, 'generator.js')) || fs.existsSync(path.join(dir, 'generator/index.js'))
14+
if (hasGenerator) {
1515
(preset.plugins || (preset.plugins = {}))[dir.replace(/[\/]$/, '')] = {
1616
_isPreset: true,
1717
prompts: true

0 commit comments

Comments
 (0)