via: one vite commit
let randomPlugin = [
{
name: 'A',
order: 'post'
},
{
name: 'B',
order: 'normal'
},
{
name: 'C',
order: 'pre'
},
{
name: 'D',
order: 'normal'
},
{
name: 'E',
order: 'pre'
},
{
name: 'F',
order: 'normal'
},
]
// Use indexes to track and insert the ordered plugins directly in the
// resulting array to avoid creating 3 extra temporary arrays per hook
let pre = 0
let normal = 0
let post = 0
let sortedPlugins = []
for(let plugin of randomPlugin) {
if (plugin.order === 'pre') {
sortedPlugins.splice(pre++, 0, plugin)
continue
}
if (plugin.order === 'post') {
sortedPlugins.splice(pre + normal + post++, 0, plugin)
continue
}
sortedPlugins.splice(pre + normal++, 0, plugin)
}
console.log(sortedPlugins)
// [
// { name: 'C', order: 'pre' },
// { name: 'E', order: 'pre' },
// { name: 'B', order: 'normal' },
// { name: 'D', order: 'normal' },
// { name: 'F', order: 'normal' },
// { name: 'A', order: 'post' }
// ]