Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why do some npm packages start with @? [duplicate]

Is there anything different about the dependencies that start with @?

Does that mean or imply something? I don't see any info about that. Take a look at my node_modules folder: folder view

Fortawesome starts with @ and does not contain the typical fortawesome.css file. So is it the same? Or does the @ indicate something?

This is my package.json:

{
  "name": "ng-frontend",
  "version": "0.0.0",
  "license": "MIT",
  "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build --prod",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e"
  },
  "private": true,
  "dependencies": {
    "@angular/animations": "^5.2.0",
    "@angular/common": "^5.2.0",
    "@angular/compiler": "^5.2.0",
    "@angular/core": "^5.2.0",
    "@angular/forms": "^5.2.0",
    "@angular/http": "^5.2.0",
    "@angular/platform-browser": "^5.2.0",
    "@angular/platform-browser-dynamic": "^5.2.0",
    "@angular/router": "^5.2.0",
    "@fortawesome/fontawesome": "^1.1.4",
    "animate.css": "^3.6.1",
    "bootstrap": "^4.0.0",
    "core-js": "^2.4.1",
    "jasny-bootstrap": "^3.1.3",
    "jquery": "^3.3.1",
    "popper.js": "^1.12.9",
    "rxjs": "^5.5.6",
    "zone.js": "^0.8.19"
  },
  "devDependencies": {
    "@angular/cli": "~1.7.2",
    "@angular/compiler-cli": "^5.2.0",
    "@angular/language-service": "^5.2.0",
    "@types/jasmine": "~2.8.3",
    "@types/jasminewd2": "~2.0.2",
    "@types/node": "~6.0.60",
    "codelyzer": "^4.0.1",
    "jasmine-core": "~2.8.0",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~2.0.0",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "^1.2.1",
    "karma-jasmine": "~1.1.0",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "~5.1.2",
    "ts-node": "~4.1.0",
    "tslint": "~5.9.1",
    "typescript": "~2.5.3"
  }
}

This question is not about Angular.

like image 919
Oscar Avatar asked Mar 07 '18 12:03

Oscar


People also ask

What does it mean when a package name starts with @?

It allows organizations to make it clear which packages are 'official' and which ones are not. For example, if a package has the scope @angular , you know it was published by the Angular core team.

What does the symbol mean in npm packages?

Major, minor and patch represent the different releases of a package. npm uses the tilde (~) and caret (^) to designate which patch and minor versions to use respectively. So if you see ~1.0. 2 it means to install version 1.0. 2 or the latest patch version such as 1.0.

What does Deduped mean npm?

deduped is short for "deduplicated" (duplicates were removed). The documentation for npm dedupe explains how npm does this: Searches the local package tree and attempts to simplify the overall structure by moving dependencies further up the tree, where they can be more effectively shared by multiple dependent packages.

What happens when you run npm install twice?

Running npm install twice creates wrong package-lock.


3 Answers

If a package's name begins with @, then it is a scoped package. The scope is everything in between the @ and the slash

@scope/project-name

How to Initialize a Scoped Package

To create a scoped package, you simply use a package name that starts with your scope.

{
  "name": "@username/project-name"
}

More details, Please visit scoped package

and

What does "@" symbol mean in "import { Component } from '@angular/core';" statement?

like image 160
Ramesh Rajendran Avatar answered Oct 23 '22 13:10

Ramesh Rajendran


@ refer to npm scoped packages:

When used in package names, scopes are preceded by an @ symbol and followed by a slash

Scopes are a way of grouping related packages together.

For instance, your package.json contains some @angular/ prefixed dependencies (@angular/animations, @angular/compiler-cli, etc) which means that they are under angular scope. The code of all those dependencies is under @angular directory.

like image 22
Gonzalo Matheu Avatar answered Oct 23 '22 11:10

Gonzalo Matheu


packages with @ denotes the organisation. In this case the organisation is Fortawesome. It contains multiple packages (you can see it inside @fortawesome folder).

As described on npm page

Creating an Organization on npm gives you an Organization scope under which you can have your own namespace for packages.

Scopes are great for many reasons, for example:

  • Maintain a fork of a package, e.g. @the-best/request.
  • Avoiding name disputes with popular names, e.g. @the-best/cat.
  • Improving internal discovery of Organization-supported packages (they're all in a single namespace!)

Hope that helps.

like image 12
Farhan Haque Avatar answered Oct 23 '22 13:10

Farhan Haque