1 | 'use strict'
|
2 |
|
3 | const debug = require('debug')('elint:utils:writePackageJson')
|
4 | const path = require('path')
|
5 | const fs = require('fs-extra')
|
6 | const lodash = require('lodash')
|
7 | const writeJsonFile = require('write-json-file')
|
8 | const sort = require('./sort-object')
|
9 | const { getBaseDir } = require('../env')
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 | function writePackageJson (devDependencies) {
|
18 | debug('input devDependencies: %o', devDependencies)
|
19 |
|
20 | if (!lodash.isPlainObject(devDependencies)) {
|
21 | debug('devDependencies isn\'t plain object, return')
|
22 |
|
23 | return Promise.resolve()
|
24 | }
|
25 |
|
26 | const baseDir = getBaseDir()
|
27 | const pkgPath = path.join(baseDir, 'package.json')
|
28 |
|
29 | debug(`package.json: ${pkgPath}`)
|
30 |
|
31 | if (!fs.existsSync(pkgPath)) {
|
32 | debug(`file not exists: ${pkgPath}, return`)
|
33 | return Promise.resolve()
|
34 | }
|
35 |
|
36 | let content
|
37 |
|
38 | try {
|
39 | content = JSON.parse(fs.readFileSync(pkgPath))
|
40 | } catch (error) {
|
41 | debug('parse package.json error')
|
42 | return Promise.resolve()
|
43 | }
|
44 |
|
45 | content.devDependencies = sort(Object.assign(
|
46 | {},
|
47 | content.devDependencies || {},
|
48 | devDependencies
|
49 | ))
|
50 |
|
51 | return writeJsonFile(pkgPath, content, {
|
52 | detectIndent: true
|
53 | })
|
54 | }
|
55 |
|
56 | module.exports = writePackageJson
|