UNPKG

2.37 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = void 0;
7
8var _fs = _interopRequireDefault(require("fs"));
9
10var _path = _interopRequireDefault(require("path"));
11
12var _crossSpawn = _interopRequireDefault(require("cross-spawn"));
13
14var _logger = _interopRequireDefault(require("@parcel/logger"));
15
16var _promiseFromProcess = _interopRequireDefault(require("./promiseFromProcess"));
17
18function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
20function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
21
22const NPM_CMD = 'npm';
23
24class Npm {
25 constructor({
26 cwd,
27 packageLocation
28 }) {
29 _defineProperty(this, "cwd", void 0);
30
31 _defineProperty(this, "packageLocation", void 0);
32
33 this.cwd = cwd;
34 this.packageLocation = packageLocation;
35 }
36
37 async install(modules, saveDev = true) {
38 // npm doesn't auto-create a package.json when installing,
39 // so create an empty one if needed.
40 if (this.packageLocation == null) {
41 await _fs.default.writeFile(_path.default.join(this.cwd, 'package.json'), '{}');
42 }
43
44 let args = ['install', '--json', ...modules, saveDev ? '--save-dev' : '--save'];
45 let installProcess = (0, _crossSpawn.default)(NPM_CMD, args, {
46 cwd: this.cwd
47 });
48 let stdout = '';
49 installProcess.stdout.on('data', str => {
50 stdout += str;
51 });
52 let stderr = [];
53 installProcess.stderr.on('data', str => {
54 stderr.push(str);
55 });
56
57 try {
58 await (0, _promiseFromProcess.default)(installProcess);
59 let results = JSON.parse(stdout);
60 let addedCount = results.added.length;
61
62 if (addedCount > 0) {
63 _logger.default.log(`Added ${addedCount} packages via npm`);
64 } // Since we succeeded, stderr might have useful information not included
65 // in the json written to stdout. It's also not necessary to log these as
66 // errors as they often aren't.
67
68
69 for (let message of stderr) {
70 _logger.default.log(message);
71 }
72 } catch (e) {
73 throw new Error('npm failed to install modules');
74 }
75 }
76
77}
78
79exports.default = Npm;
80
81_defineProperty(Npm, "__exportSpecifier", "@parcel/utils/lib/Npm.js");
\No newline at end of file