UNPKG

1.12 kBJavaScriptView Raw
1'use strict'
2
3const debug = require('debug')('elint:lib:npmInstall')
4const _ = require('lodash')
5const exec = require('./exec')
6const parse = require('../utils/parse-npm-option')
7
8/**
9 * @typedef InstallOptions
10 * @property {string} prefix 安装路径
11 * @property {string} registry npm 仓库
12 * @property {boolean} saveDev --save-dev
13 */
14
15/**
16 * npm install
17 *
18 * @param {Array<string>|string} names package name
19 * @param {InstallOptions} options install options
20 * @returns {Promise} promise
21 */
22function npmInstall (names, options) {
23 const parsedNames = Array.isArray(names) ? names : [names]
24 const parsedOptions = []
25
26 // 兼容 node v6
27 _.toPairs(options).forEach(([option, value]) => {
28 if (value === false) {
29 return
30 }
31
32 parsedOptions.push(parse(option))
33
34 if (typeof value === 'string') {
35 parsedOptions.push(value)
36 }
37 })
38
39 if (options.prefix) {
40 parsedOptions.unshift('--global')
41 }
42
43 const argus = [
44 'install',
45 ...parsedNames,
46 ...parsedOptions
47 ]
48
49 debug(`run "npm ${argus.join(' ')}"`)
50
51 return exec('npm')(...argus)
52}
53
54module.exports = npmInstall