From a34246bafe73218dc9e3090df9ee800451db2c7d Mon Sep 17 00:00:00 2001 From: Lars Willighagen Date: Mon, 26 Nov 2018 17:03:27 +0100 Subject: [PATCH] edit: scoped packages (#75) * edit: fix handling of scoped packages * edit: fix usage info * docs: fix docs for the npm-edit command PR-URL: https://github.com/npm/cli/pull/75 Credit: @larsgw Reviewed-By: @iarna --- doc/cli/npm-edit.md | 8 +++++--- lib/edit.js | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/doc/cli/npm-edit.md b/doc/cli/npm-edit.md index 89ecfa877eeac..f9913a015ad3b 100644 --- a/doc/cli/npm-edit.md +++ b/doc/cli/npm-edit.md @@ -3,12 +3,14 @@ npm-edit(1) -- Edit an installed package ## SYNOPSIS - npm edit [@] + npm edit [/...] ## DESCRIPTION -Opens the package folder in the default editor (or whatever you've -configured as the npm `editor` config -- see `npm-config(7)`.) +Selects a (sub)dependency in the current +working directory and opens the package folder in the default editor +(or whatever you've configured as the npm `editor` config -- see +`npm-config(7)`.) After it has been edited, the package is rebuilt so as to pick up any changes in compiled packages. diff --git a/lib/edit.js b/lib/edit.js index 48bcd5d346cad..2e8b339e998bd 100644 --- a/lib/edit.js +++ b/lib/edit.js @@ -2,7 +2,7 @@ // open the package folder in the $EDITOR module.exports = edit -edit.usage = 'npm edit [@]' +edit.usage = 'npm edit [/...]' edit.completion = require('./utils/completion/installed-shallow.js') @@ -22,6 +22,20 @@ function edit (args, cb) { )) } p = p.split('/') + // combine scoped parts + .reduce(function (parts, part) { + if (parts.length === 0) { + return [part] + } + var lastPart = parts[parts.length - 1] + // check if previous part is the first part of a scoped package + if (lastPart[0] === '@' && !lastPart.includes('/')) { + parts[parts.length - 1] += '/' + part + } else { + parts.push(part) + } + return parts + }, []) .join('/node_modules/') .replace(/(\/node_modules)+/, '/node_modules') var f = path.resolve(npm.dir, p)