From a7d57fd172de372ffc89b31beff3f0e0ab0088d1 Mon Sep 17 00:00:00 2001 From: TETRA2000 Date: Sun, 19 Jul 2020 17:18:44 +0900 Subject: [PATCH] fix: Generate TypeScript templete when using Router --- packages/@vue/cli/lib/Generator.js | 4 ++++ .../@vue/cli/lib/util/sortArrayPartially.js | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 packages/@vue/cli/lib/util/sortArrayPartially.js diff --git a/packages/@vue/cli/lib/Generator.js b/packages/@vue/cli/lib/Generator.js index 8e311dc1da..f8cdaa6c83 100644 --- a/packages/@vue/cli/lib/Generator.js +++ b/packages/@vue/cli/lib/Generator.js @@ -3,6 +3,7 @@ const debug = require('debug') const GeneratorAPI = require('./GeneratorAPI') const PackageManager = require('./util/ProjectPackageManager') const sortObject = require('./util/sortObject') +const sortArrayPartially = require('./util/sortArrayPartially') const writeFileTree = require('./util/writeFileTree') const inferRootOptions = require('./util/inferRootOptions') const normalizeFilePaths = require('./util/normalizeFilePaths') @@ -143,6 +144,9 @@ module.exports = class Generator { this.afterAnyInvokeCbs = [] this.postProcessFilesCbs = [] + // `@vue/cli-plugin-router` must be executed before `@vue/cli-plugin-typescript` + this.plugins = sortArrayPartially(this.plugins, ['@vue/cli-plugin-router', '@vue/cli-plugin-typescript']) + // apply generators from plugins for (const plugin of this.plugins) { const { id, apply, options } = plugin diff --git a/packages/@vue/cli/lib/util/sortArrayPartially.js b/packages/@vue/cli/lib/util/sortArrayPartially.js new file mode 100644 index 0000000000..04d721173d --- /dev/null +++ b/packages/@vue/cli/lib/util/sortArrayPartially.js @@ -0,0 +1,21 @@ +module.exports = function sortArrayPartially (array, idOrder) { + if (!array) return [] + const res = array + const swappableIndexes = [] + const subArrayItems = [] + + if (idOrder) { + idOrder.forEach(key => { + const index = array.findIndex((i) => i.id === key) + if (index !== -1) { + swappableIndexes.push(index) + subArrayItems.push(array[index]) + } + }) + } + swappableIndexes.sort().forEach((index, subIndex) => { + res[index] = subArrayItems[subIndex] + }) + + return res +}