Change:
Similar to the in Atom, there should be a way to update Marketplace extensions from the command line. Currently there are and commands, but no command for upgrading extensions.
Hello! I've been checking this issue to make a first contribution, but it seems that already has that functionality! To test it, I installed an out of extension from the vsix file and then did this: So... Maybe we should just alias the command, or is this missing any functionality I'm not noticing? Thanks!
That's what I thought! Good to know. Yeah let's just have an alias for it.
Hmm... Looking at the code, it seems we check if an extension is installed and return if it is.
as I understand the code (very, very limited understanding!), and after the quick test I did, I would think that check for the extension being installed only returns true if the extension is up to date.
I don't think so. There is no checks on version in the above code.
Anyone working on this feature? I am a beginner but would like to work on this issue and contribute.
There's already a PR for it:
This works in a weird way for me - Install old version of extension from vsix Run - If I respond , it cancels the install. I have to respond with which is unusual Is this how it's intended to be used?
Yeah unfortunately that's the current status of the dialog service in the CLI environment. Needs polish, feel free to file an issue for that.
I'm unsure why this issue was closed What is the command to update ALL extensions from CLI (without code opening)? Something like
This issue was about updating a single extension. Feel free to file an issue to support updating all extensions.
Done. See

Discussion:
import product from 'vs/platform/node/product'; import pkg from 'vs/platform/node/package'; import * as path from 'path'; <ins> import * as semver from 'semver'; </ins> import { TPromise } from 'vs/base/common/winjs.base'; import { sequence } from 'vs/base/common/async';

.filter(e => !/.vsix$/i.test(e)) .map(id => () => { return this.extensionManagementService.getInstalled(LocalExtensionType.User).then(installed => { <del> const isInstalled = installed.some(e => getId(e.manifest) === id); if (isInstalled) { console.log(localize('alreadyInstalled', "Extension '{0}' is already installed.", id)); return TPromise.as(null); } </del> return this.extensionGalleryService.query({ names: [id], source: 'cli' }) .then<IPager<IGalleryExtension>>(null, err => { if (err.responseText) {

return TPromise.wrapError(new Error(`${notFound(id)}n${useId}`)); } <del> console.log(localize('foundExtension', "Found '{0}' in the marketplace.", id)); console.log(localize('installing', "Installing...")); </del> <ins> const isInstalled = installed.some(e => getId(e.manifest) === id); if (isInstalled) { const installedExtension = installed.filter(e => getId(e.manifest) === id)[0]; const installedVersion = installedExtension.manifest.version; const newestVersion = extension.version; const shouldUpdate = semver.gt(newestVersion, installedVersion); if (shouldUpdate) { console.log(localize('foundNewerVersion', "Installed version is '{0}', found newer version '{1}' in the marketplace.", installedVersion, newestVersion)); console.log(localize('updating', "Updating...")); } else { console.log(localize('alreadyUpdated', "Installed version is the latest version.")); return TPromise.as(null); } } else { console.log(localize('foundExtension', "Found '{0}' in the marketplace.", id)); console.log(localize('installing', "Installing...")); } </ins> return this.extensionManagementService.installFromGallery(extension) .then(