1<!DOCTYPE html><html><head> 2<meta charset="utf-8"> 3<title>scope</title> 4<style> 5body { 6 background-color: #ffffff; 7 color: #24292e; 8 9 margin: 0; 10 11 line-height: 1.5; 12 13 font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; 14} 15#rainbar { 16 height: 10px; 17 background-image: linear-gradient(139deg, #fb8817, #ff4b01, #c12127, #e02aff); 18} 19 20a { 21 text-decoration: none; 22 color: #0366d6; 23} 24a:hover { 25 text-decoration: underline; 26} 27 28pre { 29 margin: 1em 0px; 30 padding: 1em; 31 border: solid 1px #e1e4e8; 32 border-radius: 6px; 33 34 display: block; 35 overflow: auto; 36 37 white-space: pre; 38 39 background-color: #f6f8fa; 40 color: #393a34; 41} 42code { 43 font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace; 44 font-size: 85%; 45 padding: 0.2em 0.4em; 46 background-color: #f6f8fa; 47 color: #393a34; 48} 49pre > code { 50 padding: 0; 51 background-color: inherit; 52 color: inherit; 53} 54h1, h2, h3 { 55 font-weight: 600; 56} 57 58#logobar { 59 background-color: #333333; 60 margin: 0 auto; 61 padding: 1em 4em; 62} 63#logobar .logo { 64 float: left; 65} 66#logobar .title { 67 font-weight: 600; 68 color: #dddddd; 69 float: left; 70 margin: 5px 0 0 1em; 71} 72#logobar:after { 73 content: ""; 74 display: block; 75 clear: both; 76} 77 78#content { 79 margin: 0 auto; 80 padding: 0 4em; 81} 82 83#table_of_contents > h2 { 84 font-size: 1.17em; 85} 86#table_of_contents ul:first-child { 87 border: solid 1px #e1e4e8; 88 border-radius: 6px; 89 padding: 1em; 90 background-color: #f6f8fa; 91 color: #393a34; 92} 93#table_of_contents ul { 94 list-style-type: none; 95 padding-left: 1.5em; 96} 97#table_of_contents li { 98 font-size: 0.9em; 99} 100#table_of_contents li a { 101 color: #000000; 102} 103 104header.title { 105 border-bottom: solid 1px #e1e4e8; 106} 107header.title > h1 { 108 margin-bottom: 0.25em; 109} 110header.title > .description { 111 display: block; 112 margin-bottom: 0.5em; 113 line-height: 1; 114} 115 116footer#edit { 117 border-top: solid 1px #e1e4e8; 118 margin: 3em 0 4em 0; 119 padding-top: 2em; 120} 121</style> 122</head> 123<body> 124<div id="banner"> 125<div id="rainbar"></div> 126<div id="logobar"> 127<svg class="logo" role="img" height="32" width="32" viewBox="0 0 700 700"> 128<polygon fill="#cb0000" points="0,700 700,700 700,0 0,0"></polygon> 129<polygon fill="#ffffff" points="150,550 350,550 350,250 450,250 450,550 550,550 550,150 150,150"></polygon> 130</svg> 131<div class="title"> 132npm command-line interface 133</div> 134</div> 135</div> 136 137<section id="content"> 138<header class="title"> 139<h1 id="scope">scope</h1> 140<span class="description">Scoped packages</span> 141</header> 142 143<section id="table_of_contents"> 144<h2 id="table-of-contents">Table of contents</h2> 145<div id="_table_of_contents"><ul><li><a href="#description">Description</a></li><li><a href="#installing-scoped-packages">Installing scoped packages</a></li><li><a href="#requiring-scoped-packages">Requiring scoped packages</a></li><li><a href="#publishing-scoped-packages">Publishing scoped packages</a></li><ul><li><a href="#publishing-public-scoped-packages-to-the-primary-npm-registry">Publishing public scoped packages to the primary npm registry</a></li><li><a href="#publishing-private-scoped-packages-to-the-npm-registry">Publishing private scoped packages to the npm registry</a></li></ul><li><a href="#associating-a-scope-with-a-registry">Associating a scope with a registry</a></li><li><a href="#see-also">See also</a></li></ul></div> 146</section> 147 148<div id="_content"><h3 id="description">Description</h3> 149<p>All npm packages have a name. Some package names also have a scope. A scope 150follows the usual rules for package names (URL-safe characters, no leading dots 151or underscores). When used in package names, scopes are preceded by an <code>@</code> symbol 152and followed by a slash, e.g.</p> 153<pre><code class="language-bash">@somescope/somepackagename 154</code></pre> 155<p>Scopes are a way of grouping related packages together, and also affect a few 156things about the way npm treats the package.</p> 157<p>Each npm user/organization has their own scope, and only you can add packages 158in your scope. This means you don't have to worry about someone taking your 159package name ahead of you. Thus it is also a good way to signal official packages 160for organizations.</p> 161<p>Scoped packages can be published and installed as of <code>npm@2</code> and are supported 162by the primary npm registry. Unscoped packages can depend on scoped packages and 163vice versa. The npm client is backwards-compatible with unscoped registries, 164so it can be used to work with scoped and unscoped registries at the same time.</p> 165<h3 id="installing-scoped-packages">Installing scoped packages</h3> 166<p>Scoped packages are installed to a sub-folder of the regular installation 167folder, e.g. if your other packages are installed in <code>node_modules/packagename</code>, 168scoped modules will be installed in <code>node_modules/@myorg/packagename</code>. The scope 169folder (<code>@myorg</code>) is simply the name of the scope preceded by an <code>@</code> symbol, and can 170contain any number of scoped packages.</p> 171<p>A scoped package is installed by referencing it by name, preceded by an 172<code>@</code> symbol, in <code>npm install</code>:</p> 173<pre><code class="language-bash">npm install @myorg/mypackage 174</code></pre> 175<p>Or in <code>package.json</code>:</p> 176<pre><code class="language-json">"dependencies": { 177 "@myorg/mypackage": "^1.3.0" 178} 179</code></pre> 180<p>Note that if the <code>@</code> symbol is omitted, in either case, npm will instead attempt to 181install from GitHub; see <a href="../commands/npm-install.html"><code>npm install</code></a>.</p> 182<h3 id="requiring-scoped-packages">Requiring scoped packages</h3> 183<p>Because scoped packages are installed into a scope folder, you have to 184include the name of the scope when requiring them in your code, e.g.</p> 185<pre><code class="language-javascript">require('@myorg/mypackage') 186</code></pre> 187<p>There is nothing special about the way Node treats scope folders. This 188simply requires the <code>mypackage</code> module in the folder named <code>@myorg</code>.</p> 189<h3 id="publishing-scoped-packages">Publishing scoped packages</h3> 190<p>Scoped packages can be published from the CLI as of <code>npm@2</code> and can be 191published to any registry that supports them, including the primary npm 192registry.</p> 193<p>(As of 2015-04-19, and with npm 2.0 or better, the primary npm registry 194<strong>does</strong> support scoped packages.)</p> 195<p>If you wish, you may associate a scope with a registry; see below.</p> 196<h4 id="publishing-public-scoped-packages-to-the-primary-npm-registry">Publishing public scoped packages to the primary npm registry</h4> 197<p>Publishing to a scope, you have two options:</p> 198<ul> 199<li>Publishing to your user scope (example: <code>@username/module</code>)</li> 200<li>Publishing to an organization scope (example: <code>@org/module</code>)</li> 201</ul> 202<p>If publishing a public module to an organization scope, you must 203first either create an organization with the name of the scope 204that you'd like to publish to or be added to an existing organization 205with the appropriate permissions. For example, if you'd like to 206publish to <code>@org</code>, you would need to create the <code>org</code> organization 207on npmjs.com prior to trying to publish.</p> 208<p>Scoped packages are not public by default. You will need to specify 209<code>--access public</code> with the initial <code>npm publish</code> command. This will publish 210the package and set access to <code>public</code> as if you had run <code>npm access public</code> 211after publishing. You do not need to do this when publishing new versions of 212an existing scoped package.</p> 213<h4 id="publishing-private-scoped-packages-to-the-npm-registry">Publishing private scoped packages to the npm registry</h4> 214<p>To publish a private scoped package to the npm registry, you must have 215an <a href="https://docs.npmjs.com/private-modules/intro">npm Private Modules</a> 216account.</p> 217<p>You can then publish the module with <code>npm publish</code> or <code>npm publish --access restricted</code>, and it will be present in the npm registry, with 218restricted access. You can then change the access permissions, if 219desired, with <code>npm access</code> or on the npmjs.com website.</p> 220<h3 id="associating-a-scope-with-a-registry">Associating a scope with a registry</h3> 221<p>Scopes can be associated with a separate registry. This allows you to 222seamlessly use a mix of packages from the primary npm registry and one or more 223private registries, such as <a href="https://github.com/features/packages">GitHub Packages</a> or the open source <a href="https://verdaccio.org">Verdaccio</a> 224project.</p> 225<p>You can associate a scope with a registry at login, e.g.</p> 226<pre><code class="language-bash">npm login --registry=http://reg.example.com --scope=@myco 227</code></pre> 228<p>Scopes have a many-to-one relationship with registries: one registry can 229host multiple scopes, but a scope only ever points to one registry.</p> 230<p>You can also associate a scope with a registry using <code>npm config</code>:</p> 231<pre><code class="language-bash">npm config set @myco:registry=http://reg.example.com 232</code></pre> 233<p>Once a scope is associated with a registry, any <code>npm install</code> for a package 234with that scope will request packages from that registry instead. Any 235<code>npm publish</code> for a package name that contains the scope will be published to 236that registry instead.</p> 237<h3 id="see-also">See also</h3> 238<ul> 239<li><a href="../commands/npm-install.html">npm install</a></li> 240<li><a href="../commands/npm-publish.html">npm publish</a></li> 241<li><a href="../commands/npm-access.html">npm access</a></li> 242<li><a href="../using-npm/registry.html">npm registry</a></li> 243</ul></div> 244 245<footer id="edit"> 246<a href="https://github.com/npm/cli/edit/latest/docs/content/using-npm/scope.md"> 247<svg role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentcolor" style="vertical-align: text-bottom; margin-right: 0.3em;"> 248<path fill-rule="evenodd" d="M11.013 1.427a1.75 1.75 0 012.474 0l1.086 1.086a1.75 1.75 0 010 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 01-.927-.928l.929-3.25a1.75 1.75 0 01.445-.758l8.61-8.61zm1.414 1.06a.25.25 0 00-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 000-.354l-1.086-1.086zM11.189 6.25L9.75 4.81l-6.286 6.287a.25.25 0 00-.064.108l-.558 1.953 1.953-.558a.249.249 0 00.108-.064l6.286-6.286z"></path> 249</svg> 250Edit this page on GitHub 251</a> 252</footer> 253</section> 254 255 256 257</body></html>