Skip to content

Commit

Permalink
feat: add support for npm (#10)
Browse files Browse the repository at this point in the history
* refactor: move yarn commands into its own object

This refactoring is a first step to add support for npm.

* feat: add npm support

If yarn wasn't used to install packages, use npm.
  • Loading branch information
vmx authored and hugomrdias committed Jul 31, 2019
1 parent 69efcd9 commit f34f336
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 5 deletions.
39 changes: 34 additions & 5 deletions cli.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ const readPkg = require('read-pkg');
const Conf = require('conf');
const { default: PQueue } = require('p-queue');
const updateNotifier = require('update-notifier');
const hasYarn = require('has-yarn');

const cli = meow(`
Usage
Expand Down Expand Up @@ -67,6 +68,34 @@ if (['link', 'connect', 'reset'].includes(cmd)) {
}
}

let packageManager;

if (hasYarn(cwd)) {
packageManager = {
add: modules => execa('yarn', ['add', ...modules]),
addDev: modules => execa('yarn', ['add', '--dev', ...modules]),
pack: (packFile, depPath) =>
execa('yarn', ['pack', '--filename', packFile], { cwd: depPath })
};
} else {
packageManager = {
add: modules => execa('npm', ['install', ...modules]),
addDev: modules => execa('npm', ['install', '--save-dev', ...modules]),
pack: async (packFile, depPath) => {
const parsedPath = path.parse(packFile);
const filename = parsedPath.base;
// The filename npm creates doesn't have a timestamp
const packName = filename.substring(0, filename.lastIndexOf('-')) + '.tgz';
const cacheDir = parsedPath.dir;

await execa('npm', ['pack', depPath], { cwd: cacheDir });
fs.renameSync(
path.join(cacheDir, packName),
path.join(cacheDir, filename));
}
};
}

switch (cmd) {
case 'link':
link();
Expand Down Expand Up @@ -205,13 +234,13 @@ async function reset() {

if (normal.length > 0) {
spinner.start(`Resetting normal dependencies: ${normal.join(' ')}`);
await execa('yarn', ['add', ...normal]);
await packageManager.add(normal);
spinner.succeed();
}

if (dev.length > 0) {
spinner.start(`Resetting dev dependencies: ${dev.join(' ')}`);
await execa('yarn', ['add', ...dev, '--dev']);
await packageManager.addDev(dev);
spinner.succeed();
}
spinner.start('Cleaning up');
Expand All @@ -230,7 +259,7 @@ async function packInstall(configs = []) {
const name = `./.connect-deps-cache/${config.name}-${config.version}-${Date.now()}.tgz`;
const packFile = path.join(cwd, name);

await execa('yarn', ['pack', '--filename', packFile], { cwd: config.path });
await packageManager.pack(packFile, config.path);
if (config.snapshot.type === 'dev') {
dev.push(`file:${packFile}`);
} else {
Expand All @@ -241,12 +270,12 @@ async function packInstall(configs = []) {

if (normal.length > 0) {
spinner.start(`Installing dependencies: ${normal.join(' ')}`);
await execa('yarn', ['add', ...normal]);
await packageManager.add(normal);
spinner.succeed();
}
if (dev.length > 0) {
spinner.start(`Installing dev dependencies: ${dev.join(' ')}`);
await execa('yarn', ['add', '--dev', ...dev]);
await packageManager.addDev(dev);
spinner.succeed();
}
}
Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
"conf": "^5.0.0",
"del": "^5.0.0",
"execa": "^2.0.3",
"has-yarn": "^2.1.0",
"meow": "^5.0.0",
"ora": "^3.4.0",
"p-debounce": "^2.1.0",
Expand Down

0 comments on commit f34f336

Please sign in to comment.