In the Angular Component Router documentation I just stumbled over a npm command I have never seen before and I don't understand what is going on:
npm install @angular/router --save
What is the meaning of @angular/router
?
Is the whole string a package name? But then I dont find that package when I use the search on npmjs.com. And also the commandline search does return no such package:
npm search @angular/router
:No match found for "@angular/router"
So is the @angular/
some kind of prefix mechanism in npm? And how does it work?
Basically there are two types of modules of npm that are -
Global modules - these are modules that follow the naming convention that exists today. You
require('foo')
and there is much rejoicing. They are owned by one or more people through thenpm install XYZ
command.Scoped modules - these are new modules that are "scoped" under an organization name that begins with an
@
and followed by a slash, e.g.@somescope/somepackagename
. Scopes are a way of grouping related packages together, and also affect a few things about the way npm treats the package.A scoped package is installed by referencing it by name, preceded by an @-symbol, in npm install:
see also
http://blog.nodejitsu.com/a-summary-of-scoped-modules-in-npm/
https://docs.npmjs.com/misc/scope
This is a new feature of NPM called 'scoped packages', which effectively allow NPM packages to be namespaced. Every user and organization on NPM has their own scope, and they are the only people can add packages to it.
This is useful for several reasons:
@angular
, you know it was published by the Angular core team.http
is already taken in the main repository, but Angular is able to have@angular/http
as well.The reason that scoped packages don't show up in public search is because a lot of them are private packages created by organizations using NPM's paid services, and they're not comfortable opening the search up until they can be totally certain they're not going to make anything public that shouldn't be public - from a legal perspective, this is pretty understandable.
For more information, see the NPM docs and the Angular docs.
EDIT: It appears that public scoped packages now show up properly in search!