Skip to content

Commit b9f9c9f

Browse files
author
sunlin92
committed
fix: plugin 格式处理
1 parent 7118e43 commit b9f9c9f

File tree

6 files changed

+80
-19
lines changed

6 files changed

+80
-19
lines changed
Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,27 @@
11
const fs = require('fs-extra')
22
const path = require('path')
33
const ejs = require('ejs')
4+
const prettier = require('prettier')
45
const getAllPlugin = require('./plugin-get-all')
56

6-
function generatePluginConfig() {
7-
const targetPath = path.resolve(__dirname, '../../src/config/stage/plugin.js')
8-
const pluginsPath = path.resolve(__dirname, '../../src/plugin')
9-
const templatePath = path.resolve(__dirname, '../template/plugin-stage-config.js.ejs')
7+
const targetPath = path.resolve(__dirname, '../../src/config/stage/plugin.js')
8+
const pluginsPath = path.resolve(__dirname, '../../src/plugin')
9+
const templatePath = path.resolve(__dirname, '../template/plugin-stage-config.js.ejs')
1010

11+
async function renderPluginConfig(plugins) {
1112
const template = fs.readFileSync(templatePath, 'utf8')
12-
const plugins = getAllPlugin(pluginsPath)
1313
const result = ejs.render(template, { plugins })
14+
const prettierConfig = (await prettier.resolveConfig(targetPath)) || {}
15+
16+
return prettier.format(result, {
17+
...prettierConfig,
18+
filepath: targetPath,
19+
})
20+
}
21+
22+
async function generatePluginConfig() {
23+
const plugins = getAllPlugin(pluginsPath)
24+
const result = await renderPluginConfig(plugins)
1425

1526
fs.outputFileSync(targetPath, result)
1627

@@ -22,3 +33,4 @@ function generatePluginConfig() {
2233
}
2334

2435
module.exports = generatePluginConfig
36+
module.exports.renderPluginConfig = renderPluginConfig

script/plugin-get-config.js

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,20 @@ const generatePluginConfig = require('./lib/generate-plugin-config')
44

55
const targetDir = path.resolve(__dirname, '../src/config/stage/plugin.js')
66

7-
console.log(chalk.green('配置插件...'))
7+
async function main() {
8+
console.log(chalk.green('配置插件...'))
89

9-
generatePluginConfig()
10+
await generatePluginConfig()
1011

11-
console.log(chalk.green(`插件配置完成: ${targetDir}\n`))
12+
console.log(chalk.green(`插件配置完成: ${targetDir}\n`))
13+
}
14+
15+
if (require.main === module) {
16+
main().catch(error => {
17+
console.log(chalk.red('插件配置失败'))
18+
console.error(error)
19+
process.exit(1)
20+
})
21+
}
22+
23+
module.exports = main

script/plugin-init.js

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ async function handler() {
8585
})
8686
}
8787

88-
handler().then(() => {
89-
require('./plugin-get-config')
90-
})
88+
handler()
89+
.then(() => require('./plugin-get-config')())
90+
.catch(error => {
91+
console.log(chalk.red('插件初始化失败'))
92+
console.error(error)
93+
process.exit(1)
94+
})

script/plugin-new.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ inquirer
140140
console.log(chalk.green(`创建插件 ${answers.name}: ${targetPath}`))
141141
})
142142
.then(() => {
143-
require('./plugin-get-config.js')
143+
return require('./plugin-get-config.js')()
144144
})
145145
.catch(err => {
146146
console.log(chalk.red('创建插件失败'))
Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
1-
// 本文件是自动生成, 请勿修改
2-
<% plugins.forEach(function(plugin){ %>import <%= plugin.camelCaseName %> from '@/plugin/<%= plugin.name %>/stage-config'
3-
<% }); %>
1+
<%
2+
const lines = ['// 本文件是自动生成, 请勿修改']
43
5-
const pluginsConfig = [
6-
<% plugins.forEach(function(plugin){ %> <%= plugin.camelCaseName %>,
7-
<% }); %>]
4+
plugins.forEach(plugin => {
5+
lines.push(`import ${plugin.camelCaseName} from '@/plugin/${plugin.name}/stage-config'`)
6+
})
87
9-
export default pluginsConfig
8+
lines.push('')
9+
lines.push('const pluginsConfig = [')
10+
11+
plugins.forEach(plugin => {
12+
lines.push(` ${plugin.camelCaseName},`)
13+
})
14+
15+
lines.push(']')
16+
lines.push('')
17+
lines.push('export default pluginsConfig')
18+
-%>
19+
<%- `${lines.join('\n')}\n` %>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { createRequire } from 'node:module'
2+
3+
import * as prettier from 'prettier'
4+
import { describe, expect, it } from 'vitest'
5+
6+
const require = createRequire(import.meta.url)
7+
const { renderPluginConfig } = require('../../script/lib/generate-plugin-config')
8+
9+
describe('plugin config generator', () => {
10+
it('renders plugin config that passes prettier when plugins exist', async () => {
11+
const result = await renderPluginConfig([
12+
{ camelCaseName: 'demoPlugin', name: 'demo-plugin' },
13+
{ camelCaseName: 'fooBar', name: 'foo-bar' },
14+
])
15+
16+
const prettierConfig = (await prettier.resolveConfig('src/config/stage/plugin.js')) || {}
17+
18+
await expect(prettier.check(result, { ...prettierConfig, filepath: 'src/config/stage/plugin.js' })).resolves.toBe(
19+
true,
20+
)
21+
expect(result).not.toContain('\n\n\n')
22+
})
23+
})

0 commit comments

Comments
 (0)