sort package.json fields

This commit is contained in:
Evan You
2018-01-01 17:33:07 -05:00
parent d048b939ab
commit 83975d9373
3 changed files with 48 additions and 14 deletions
+29 -10
View File
@@ -3,6 +3,7 @@ const path = require('path')
const debug = require('debug')
const resolve = require('resolve')
const GeneratorAPI = require('./GeneratorAPI')
const sortObject = require('./util/sortObject')
const writeFileTree = require('./util/writeFileTree')
module.exports = class Generator {
@@ -30,21 +31,39 @@ module.exports = class Generator {
// wait for file resolve
await this.resolveFiles()
// set package.json
this.resolvePkg()
this.sortPkg()
this.files['package.json'] = JSON.stringify(this.pkg, null, 2)
// write file tree to disk
await writeFileTree(this.context, this.files)
}
resolvePkg () {
const sortDeps = deps => Object.keys(deps).sort().reduce((res, name) => {
res[name] = deps[name]
return res
}, {})
this.pkg.dependencies = sortDeps(this.pkg.dependencies)
this.pkg.devDependencies = sortDeps(this.pkg.devDependencies)
// TODO sort pkg keys
sortPkg () {
// ensure package.json keys has readable order
this.pkg.dependencies = sortObject(this.pkg.dependencies)
this.pkg.devDependencies = sortObject(this.pkg.devDependencies)
this.pkg.scripts = sortObject(this.pkg.scripts, [
'serve',
'build',
'test',
'e2e',
'lint',
'deploy'
])
this.pkg = sortObject(this.pkg, [
'name',
'version',
'private',
'scripts',
'dependencies',
'devDependencies',
'vue',
'babel',
'eslintConfig',
'prettier',
'postcss',
'browserslist',
'jest'
])
debug('vue:cli-pkg')(this.pkg)
}
+19
View File
@@ -0,0 +1,19 @@
module.exports = function sortObject (obj, keyOrder) {
const res = {}
const keys = Object.keys(obj)
const getOrder = key => {
const i = keyOrder.indexOf(key)
return i === -1 ? Infinity : i
}
if (keyOrder) {
keys.sort((a, b) => {
return getOrder(a) - getOrder(b)
})
} else {
keys.sort()
}
keys.forEach(key => {
res[key] = obj[key]
})
return res
}
-4
View File
@@ -8799,10 +8799,6 @@ vue-template-es2015-compiler@^1.5.3, vue-template-es2015-compiler@^1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz#dc42697133302ce3017524356a6c61b7b69b4a18"
vue@^2.5.13:
version "2.5.13"
resolved "https://registry.yarnpkg.com/vue/-/vue-2.5.13.tgz#95bd31e20efcf7a7f39239c9aa6787ce8cf578e1"
walker@~1.0.5:
version "1.0.7"
resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"