mirror of
				https://github.com/titanscouting/tra-analysis.git
				synced 2025-10-28 19:56:51 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			579 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			579 lines
		
	
	
		
			36 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!doctype html>
 | |
| <html>
 | |
|   <title>package.json</title>
 | |
|   <meta charset="utf-8">
 | |
|   <link rel="stylesheet" type="text/css" href="../../static/style.css">
 | |
|   <link rel="canonical" href="https://www.npmjs.org/doc/files/package.json.html">
 | |
|   <script async=true src="../../static/toc.js"></script>
 | |
| 
 | |
|   <body>
 | |
|     <div id="wrapper">
 | |
| 
 | |
| <h1><a href="../files/package.json.html">package.json</a></h1> <p>Specifics of npm's package.json handling</p>
 | |
| <h2 id="description">DESCRIPTION</h2>
 | |
| <p>This document is all you need to know about what's required in your package.json
 | |
| file.  It must be actual JSON, not just a JavaScript object literal.</p>
 | |
| <p>A lot of the behavior described in this document is affected by the config
 | |
| settings described in <code><a href="../misc/npm-config.html">npm-config(7)</a></code>.</p>
 | |
| <h2 id="name">name</h2>
 | |
| <p>If you plan to publish your package, the <em>most</em> important things in your
 | |
| package.json are the name and version fields as they will be required. The name
 | |
| and version together form an identifier that is assumed to be completely unique.
 | |
| Changes to the package should come along with changes to the version. If you don't
 | |
| plan to publish your package, the name and version fields are optional.</p>
 | |
| <p>The name is what your thing is called.</p>
 | |
| <p>Some rules:</p>
 | |
| <ul>
 | |
| <li>The name must be less than or equal to 214 characters. This includes the scope for
 | |
| scoped packages.</li>
 | |
| <li>The name can't start with a dot or an underscore.</li>
 | |
| <li>New packages must not have uppercase letters in the name.</li>
 | |
| <li>The name ends up being part of a URL, an argument on the command line, and a
 | |
| folder name. Therefore, the name can't contain any non-URL-safe characters.</li>
 | |
| </ul>
 | |
| <p>Some tips:</p>
 | |
| <ul>
 | |
| <li>Don't use the same name as a core Node module.</li>
 | |
| <li>Don't put "js" or "node" in the name.  It's assumed that it's js, since you're
 | |
| writing a package.json file, and you can specify the engine using the "engines"
 | |
| field.  (See below.)</li>
 | |
| <li>The name will probably be passed as an argument to require(), so it should
 | |
| be something short, but also reasonably descriptive.</li>
 | |
| <li>You may want to check the npm registry to see if there's something by that name
 | |
| already, before you get too attached to it. <a href="https://www.npmjs.com/">https://www.npmjs.com/</a></li>
 | |
| </ul>
 | |
| <p>A name can be optionally prefixed by a scope, e.g. <code>@myorg/mypackage</code>. See
 | |
| <code><a href="../misc/npm-scope.html">npm-scope(7)</a></code> for more detail.</p>
 | |
| <h2 id="version">version</h2>
 | |
| <p>If you plan to publish your package, the <em>most</em> important things in your
 | |
| package.json are the name and version fields as they will be required. The name
 | |
| and version together form an identifier that is assumed to be completely unique.
 | |
| Changes to the package should come along with changes to the version. If you don't
 | |
| plan to publish your package, the name and version fields are optional.</p>
 | |
| <p>Version must be parseable by
 | |
| <a href="https://github.com/isaacs/node-semver">node-semver</a>, which is bundled
 | |
| with npm as a dependency.  (<code>npm install semver</code> to use it yourself.)</p>
 | |
| <p>More on version numbers and ranges at <a href="../misc/semver.html">semver(7)</a>.</p>
 | |
| <h2 id="description">description</h2>
 | |
| <p>Put a description in it.  It's a string.  This helps people discover your
 | |
| package, as it's listed in <code>npm search</code>.</p>
 | |
| <h2 id="keywords">keywords</h2>
 | |
| <p>Put keywords in it.  It's an array of strings.  This helps people
 | |
| discover your package as it's listed in <code>npm search</code>.</p>
 | |
| <h2 id="homepage">homepage</h2>
 | |
| <p>The url to the project homepage.</p>
 | |
| <p>Example:</p>
 | |
| <pre><code>"homepage": "https://github.com/owner/project#readme"</code></pre><h2 id="bugs">bugs</h2>
 | |
| <p>The url to your project's issue tracker and / or the email address to which
 | |
| issues should be reported. These are helpful for people who encounter issues
 | |
| with your package.</p>
 | |
| <p>It should look like this:</p>
 | |
| <pre><code>{ "url" : "https://github.com/owner/project/issues"
 | |
| , "email" : "project@hostname.com"
 | |
| }</code></pre><p>You can specify either one or both values. If you want to provide only a url,
 | |
| you can specify the value for "bugs" as a simple string instead of an object.</p>
 | |
| <p>If a url is provided, it will be used by the <code>npm bugs</code> command.</p>
 | |
| <h2 id="license">license</h2>
 | |
| <p>You should specify a license for your package so that people know how they are
 | |
| permitted to use it, and any restrictions you're placing on it.</p>
 | |
| <p>If you're using a common license such as BSD-2-Clause or MIT, add a
 | |
| current SPDX license identifier for the license you're using, like this:</p>
 | |
| <pre><code>{ "license" : "BSD-3-Clause" }</code></pre><p>You can check <a href="https://spdx.org/licenses/">the full list of SPDX license IDs</a>.
 | |
| Ideally you should pick one that is
 | |
| <a href="https://opensource.org/licenses/alphabetical">OSI</a> approved.</p>
 | |
| <p>If your package is licensed under multiple common licenses, use an <a href="https://www.npmjs.com/package/spdx">SPDX license
 | |
| expression syntax version 2.0 string</a>, like this:</p>
 | |
| <pre><code>{ "license" : "(ISC OR GPL-3.0)" }</code></pre><p>If you are using a license that hasn't been assigned an SPDX identifier, or if
 | |
| you are using a custom license, use a string value like this one:</p>
 | |
| <pre><code>{ "license" : "SEE LICENSE IN <filename>" }</code></pre><p>Then include a file named <code><filename></code> at the top level of the package.</p>
 | |
| <p>Some old packages used license objects or a "licenses" property containing an
 | |
| array of license objects:</p>
 | |
| <pre><code>// Not valid metadata
 | |
| { "license" :
 | |
|   { "type" : "ISC"
 | |
|   , "url" : "https://opensource.org/licenses/ISC"
 | |
|   }
 | |
| }
 | |
| 
 | |
| // Not valid metadata
 | |
| { "licenses" :
 | |
|   [
 | |
|     { "type": "MIT"
 | |
|     , "url": "https://www.opensource.org/licenses/mit-license.php"
 | |
|     }
 | |
|   , { "type": "Apache-2.0"
 | |
|     , "url": "https://opensource.org/licenses/apache2.0.php"
 | |
|     }
 | |
|   ]
 | |
| }</code></pre><p>Those styles are now deprecated. Instead, use SPDX expressions, like this:</p>
 | |
| <pre><code>{ "license": "ISC" }
 | |
| 
 | |
| { "license": "(MIT OR Apache-2.0)" }</code></pre><p>Finally, if you do not wish to grant others the right to use a private or
 | |
| unpublished package under any terms:</p>
 | |
| <pre><code>{ "license": "UNLICENSED" }</code></pre><p>Consider also setting <code>"private": true</code> to prevent accidental publication.</p>
 | |
| <h2 id="people-fields-author-contributors">people fields: author, contributors</h2>
 | |
| <p>The "author" is one person.  "contributors" is an array of people.  A "person"
 | |
| is an object with a "name" field and optionally "url" and "email", like this:</p>
 | |
| <pre><code>{ "name" : "Barney Rubble"
 | |
| , "email" : "b@rubble.com"
 | |
| , "url" : "http://barnyrubble.tumblr.com/"
 | |
| }</code></pre><p>Or you can shorten that all into a single string, and npm will parse it for you:</p>
 | |
| <pre><code>"Barney Rubble <b@rubble.com> (http://barnyrubble.tumblr.com/)"</code></pre><p>Both email and url are optional either way.</p>
 | |
| <p>npm also sets a top-level "maintainers" field with your npm user info.</p>
 | |
| <h2 id="files">files</h2>
 | |
| <p>The optional <code>files</code> field is an array of file patterns that describes
 | |
| the entries to be included when your package is installed as a
 | |
| dependency. File patterns follow a similar syntax to <code>.gitignore</code>, but
 | |
| reversed: including a file, directory, or glob pattern (<code>*</code>, <code>**/*</code>, and such)
 | |
| will make it so that file is included in the tarball when it's packed. Omitting
 | |
| the field will make it default to <code>["*"]</code>, which means it will include all files.</p>
 | |
| <p>Some special files and directories are also included or excluded regardless of
 | |
| whether they exist in the <code>files</code> array (see below).</p>
 | |
| <p>You can also provide a <code>.npmignore</code> file in the root of your package or
 | |
| in subdirectories, which will keep files from being included. At the
 | |
| root of your package it will not override the "files" field, but in
 | |
| subdirectories it will. The <code>.npmignore</code> file works just like a
 | |
| <code>.gitignore</code>. If there is a <code>.gitignore</code> file, and <code>.npmignore</code> is
 | |
| missing, <code>.gitignore</code>'s contents will be used instead.</p>
 | |
| <p>Files included with the "package.json#files" field <em>cannot</em> be excluded
 | |
| through <code>.npmignore</code> or <code>.gitignore</code>.</p>
 | |
| <p>Certain files are always included, regardless of settings:</p>
 | |
| <ul>
 | |
| <li><code>package.json</code></li>
 | |
| <li><code><a href="../../doc/README.html">README</a></code></li>
 | |
| <li><code>CHANGES</code> / <code>CHANGELOG</code> / <code>HISTORY</code></li>
 | |
| <li><code>LICENSE</code> / <code>LICENCE</code></li>
 | |
| <li><code>NOTICE</code></li>
 | |
| <li>The file in the "main" field</li>
 | |
| </ul>
 | |
| <p><code><a href="../../doc/README.html">README</a></code>, <code>CHANGES</code>, <code>LICENSE</code> & <code>NOTICE</code> can have any case and extension.</p>
 | |
| <p>Conversely, some files are always ignored:</p>
 | |
| <ul>
 | |
| <li><code>.git</code></li>
 | |
| <li><code>CVS</code></li>
 | |
| <li><code>.svn</code></li>
 | |
| <li><code>.hg</code></li>
 | |
| <li><code>.lock-wscript</code></li>
 | |
| <li><code>.wafpickle-N</code></li>
 | |
| <li><code>.*.swp</code></li>
 | |
| <li><code>.DS_Store</code></li>
 | |
| <li><code>._*</code></li>
 | |
| <li><code>npm-debug.log</code></li>
 | |
| <li><code>.npmrc</code></li>
 | |
| <li><code>node_modules</code></li>
 | |
| <li><code>config.gypi</code></li>
 | |
| <li><code>*.orig</code></li>
 | |
| <li><code>package-lock.json</code> (use shrinkwrap instead)</li>
 | |
| </ul>
 | |
| <h2 id="main">main</h2>
 | |
| <p>The main field is a module ID that is the primary entry point to your program.
 | |
| That is, if your package is named <code>foo</code>, and a user installs it, and then does
 | |
| <code>require("foo")</code>, then your main module's exports object will be returned.</p>
 | |
| <p>This should be a module ID relative to the root of your package folder.</p>
 | |
| <p>For most modules, it makes the most sense to have a main script and often not
 | |
| much else.</p>
 | |
| <h2 id="browser">browser</h2>
 | |
| <p>If your module is meant to be used client-side the browser field should be
 | |
| used instead of the main field. This is helpful to hint users that it might
 | |
| rely on primitives that aren't available in Node.js modules. (e.g. <code>window</code>)</p>
 | |
| <h2 id="bin">bin</h2>
 | |
| <p>A lot of packages have one or more executable files that they'd like to
 | |
| install into the PATH. npm makes this pretty easy (in fact, it uses this
 | |
| feature to install the "npm" executable.)</p>
 | |
| <p>To use this, supply a <code>bin</code> field in your package.json which is a map of
 | |
| command name to local file name. On install, npm will symlink that file into
 | |
| <code>prefix/bin</code> for global installs, or <code>./node_modules/.bin/</code> for local
 | |
| installs.</p>
 | |
| <p>For example, myapp could have this:</p>
 | |
| <pre><code>{ "bin" : { "myapp" : "./cli.js" } }</code></pre><p>So, when you install myapp, it'll create a symlink from the <code>cli.js</code> script to
 | |
| <code>/usr/local/bin/myapp</code>.</p>
 | |
| <p>If you have a single executable, and its name should be the name
 | |
| of the package, then you can just supply it as a string.  For example:</p>
 | |
| <pre><code>{ "name": "my-program"
 | |
| , "version": "1.2.5"
 | |
| , "bin": "./path/to/program" }</code></pre><p>would be the same as this:</p>
 | |
| <pre><code>{ "name": "my-program"
 | |
| , "version": "1.2.5"
 | |
| , "bin" : { "my-program" : "./path/to/program" } }</code></pre><p>Please make sure that your file(s) referenced in <code>bin</code> starts with
 | |
| <code>#!/usr/bin/env node</code>, otherwise the scripts are started without the node
 | |
| executable!</p>
 | |
| <h2 id="man">man</h2>
 | |
| <p>Specify either a single file or an array of filenames to put in place for the
 | |
| <code>man</code> program to find.</p>
 | |
| <p>If only a single file is provided, then it's installed such that it is the
 | |
| result from <code>man <pkgname></code>, regardless of its actual filename.  For example:</p>
 | |
| <pre><code>{ "name" : "foo"
 | |
| , "version" : "1.2.3"
 | |
| , "description" : "A packaged foo fooer for fooing foos"
 | |
| , "main" : "foo.js"
 | |
| , "man" : "./man/doc.1"
 | |
| }</code></pre><p>would link the <code>./man/doc.1</code> file in such that it is the target for <code>man foo</code></p>
 | |
| <p>If the filename doesn't start with the package name, then it's prefixed.
 | |
| So, this:</p>
 | |
| <pre><code>{ "name" : "foo"
 | |
| , "version" : "1.2.3"
 | |
| , "description" : "A packaged foo fooer for fooing foos"
 | |
| , "main" : "foo.js"
 | |
| , "man" : [ "./man/foo.1", "./man/bar.1" ]
 | |
| }</code></pre><p>will create files to do <code>man foo</code> and <code>man foo-bar</code>.</p>
 | |
| <p>Man files must end with a number, and optionally a <code>.gz</code> suffix if they are
 | |
| compressed.  The number dictates which man section the file is installed into.</p>
 | |
| <pre><code>{ "name" : "foo"
 | |
| , "version" : "1.2.3"
 | |
| , "description" : "A packaged foo fooer for fooing foos"
 | |
| , "main" : "foo.js"
 | |
| , "man" : [ "./man/foo.1", "./man/foo.2" ]
 | |
| }</code></pre><p>will create entries for <code>man foo</code> and <code>man 2 foo</code></p>
 | |
| <h2 id="directories">directories</h2>
 | |
| <p>The CommonJS <a href="http://wiki.commonjs.org/wiki/Packages/1.0">Packages</a> spec details a
 | |
| few ways that you can indicate the structure of your package using a <code>directories</code>
 | |
| object. If you look at <a href="https://registry.npmjs.org/npm/latest">npm's package.json</a>,
 | |
| you'll see that it has directories for doc, lib, and man.</p>
 | |
| <p>In the future, this information may be used in other creative ways.</p>
 | |
| <h3 id="directories-lib">directories.lib</h3>
 | |
| <p>Tell people where the bulk of your library is.  Nothing special is done
 | |
| with the lib folder in any way, but it's useful meta info.</p>
 | |
| <h3 id="directories-bin">directories.bin</h3>
 | |
| <p>If you specify a <code>bin</code> directory in <code>directories.bin</code>, all the files in
 | |
| that folder will be added.</p>
 | |
| <p>Because of the way the <code>bin</code> directive works, specifying both a
 | |
| <code>bin</code> path and setting <code>directories.bin</code> is an error. If you want to
 | |
| specify individual files, use <code>bin</code>, and for all the files in an
 | |
| existing <code>bin</code> directory, use <code>directories.bin</code>.</p>
 | |
| <h3 id="directories-man">directories.man</h3>
 | |
| <p>A folder that is full of man pages.  Sugar to generate a "man" array by
 | |
| walking the folder.</p>
 | |
| <h3 id="directories-doc">directories.doc</h3>
 | |
| <p>Put markdown files in here.  Eventually, these will be displayed nicely,
 | |
| maybe, someday.</p>
 | |
| <h3 id="directories-example">directories.example</h3>
 | |
| <p>Put example scripts in here.  Someday, it might be exposed in some clever way.</p>
 | |
| <h3 id="directories-test">directories.test</h3>
 | |
| <p>Put your tests in here. It is currently not exposed, but it might be in the
 | |
| future.</p>
 | |
| <h2 id="repository">repository</h2>
 | |
| <p>Specify the place where your code lives. This is helpful for people who
 | |
| want to contribute.  If the git repo is on GitHub, then the <code>npm docs</code>
 | |
| command will be able to find you.</p>
 | |
| <p>Do it like this:</p>
 | |
| <pre><code>"repository": {
 | |
|   "type" : "git",
 | |
|   "url" : "https://github.com/npm/cli.git"
 | |
| }
 | |
| 
 | |
| "repository": {
 | |
|   "type" : "svn",
 | |
|   "url" : "https://v8.googlecode.com/svn/trunk/"
 | |
| }</code></pre><p>The URL should be a publicly available (perhaps read-only) url that can be handed
 | |
| directly to a VCS program without any modification.  It should not be a url to an
 | |
| html project page that you put in your browser.  It's for computers.</p>
 | |
| <p>For GitHub, GitHub gist, Bitbucket, or GitLab repositories you can use the same
 | |
| shortcut syntax you use for <code>npm install</code>:</p>
 | |
| <pre><code>"repository": "npm/npm"
 | |
| 
 | |
| "repository": "github:user/repo"
 | |
| 
 | |
| "repository": "gist:11081aaa281"
 | |
| 
 | |
| "repository": "bitbucket:user/repo"
 | |
| 
 | |
| "repository": "gitlab:user/repo"</code></pre><h2 id="scripts">scripts</h2>
 | |
| <p>The "scripts" property is a dictionary containing script commands that are run
 | |
| at various times in the lifecycle of your package.  The key is the lifecycle
 | |
| event, and the value is the command to run at that point.</p>
 | |
| <p>See <code><a href="../misc/npm-scripts.html">npm-scripts(7)</a></code> to find out more about writing package scripts.</p>
 | |
| <h2 id="config">config</h2>
 | |
| <p>A "config" object can be used to set configuration parameters used in package
 | |
| scripts that persist across upgrades.  For instance, if a package had the
 | |
| following:</p>
 | |
| <pre><code>{ "name" : "foo"
 | |
| , "config" : { "port" : "8080" } }</code></pre><p>and then had a "start" command that then referenced the
 | |
| <code>npm_package_config_port</code> environment variable, then the user could
 | |
| override that by doing <code>npm config set foo:port 8001</code>.</p>
 | |
| <p>See <code><a href="../misc/npm-config.html">npm-config(7)</a></code> and <code><a href="../misc/npm-scripts.html">npm-scripts(7)</a></code> for more on package
 | |
| configs.</p>
 | |
| <h2 id="dependencies">dependencies</h2>
 | |
| <p>Dependencies are specified in a simple object that maps a package name to a
 | |
| version range. The version range is a string which has one or more
 | |
| space-separated descriptors.  Dependencies can also be identified with a
 | |
| tarball or git URL.</p>
 | |
| <p><strong>Please do not put test harnesses or transpilers in your
 | |
| <code>dependencies</code> object.</strong>  See <code>devDependencies</code>, below.</p>
 | |
| <p>See <a href="../misc/semver.html">semver(7)</a> for more details about specifying version ranges.</p>
 | |
| <ul>
 | |
| <li><code>version</code> Must match <code>version</code> exactly</li>
 | |
| <li><code>>version</code> Must be greater than <code>version</code></li>
 | |
| <li><code>>=version</code> etc</li>
 | |
| <li><code><version</code></li>
 | |
| <li><code><=version</code></li>
 | |
| <li><code>~version</code> "Approximately equivalent to version"  See <a href="../misc/semver.html">semver(7)</a></li>
 | |
| <li><code>^version</code> "Compatible with version"  See <a href="../misc/semver.html">semver(7)</a></li>
 | |
| <li><code>1.2.x</code> 1.2.0, 1.2.1, etc., but not 1.3.0</li>
 | |
| <li><code>http://...</code> See 'URLs as Dependencies' below</li>
 | |
| <li><code>*</code> Matches any version</li>
 | |
| <li><code>""</code> (just an empty string) Same as <code>*</code></li>
 | |
| <li><code>version1 - version2</code> Same as <code>>=version1 <=version2</code>.</li>
 | |
| <li><code>range1 || range2</code> Passes if either range1 or range2 are satisfied.</li>
 | |
| <li><code>git...</code> See 'Git URLs as Dependencies' below</li>
 | |
| <li><code>user/repo</code> See 'GitHub URLs' below</li>
 | |
| <li><code>tag</code> A specific version tagged and published as <code>tag</code>  See <code><a href="../cli/npm-dist-tag.html">npm-dist-tag(1)</a></code></li>
 | |
| <li><code>path/path/path</code> See <a href="#local-paths">Local Paths</a> below</li>
 | |
| </ul>
 | |
| <p>For example, these are all valid:</p>
 | |
| <pre><code>{ "dependencies" :
 | |
|   { "foo" : "1.0.0 - 2.9999.9999"
 | |
|   , "bar" : ">=1.0.2 <2.1.2"
 | |
|   , "baz" : ">1.0.2 <=2.3.4"
 | |
|   , "boo" : "2.0.1"
 | |
|   , "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"
 | |
|   , "asd" : "http://asdf.com/asdf.tar.gz"
 | |
|   , "til" : "~1.2"
 | |
|   , "elf" : "~1.2.3"
 | |
|   , "two" : "2.x"
 | |
|   , "thr" : "3.3.x"
 | |
|   , "lat" : "latest"
 | |
|   , "dyl" : "file:../dyl"
 | |
|   }
 | |
| }</code></pre><h3 id="urls-as-dependencies">URLs as Dependencies</h3>
 | |
| <p>You may specify a tarball URL in place of a version range.</p>
 | |
| <p>This tarball will be downloaded and installed locally to your package at
 | |
| install time.</p>
 | |
| <h3 id="git-urls-as-dependencies">Git URLs as Dependencies</h3>
 | |
| <p>Git urls are of the form:</p>
 | |
| <pre><code><protocol>://[<user>[:<password>]@]<hostname>[:<port>][:][/]<path>[#<commit-ish> | #semver:<semver>]</code></pre><p><code><protocol></code> is one of <code>git</code>, <code>git+ssh</code>, <code>git+http</code>, <code>git+https</code>, or
 | |
| <code>git+file</code>.</p>
 | |
| <p>If <code>#<commit-ish></code> is provided, it will be used to clone exactly that
 | |
| commit. If the commit-ish has the format <code>#semver:<semver></code>, <code><semver></code> can
 | |
| be any valid semver range or exact version, and npm will look for any tags
 | |
| or refs matching that range in the remote repository, much as it would for a
 | |
| registry dependency. If neither <code>#<commit-ish></code> or <code>#semver:<semver></code> is
 | |
| specified, then <code>master</code> is used.</p>
 | |
| <p>Examples:</p>
 | |
| <pre><code>git+ssh://git@github.com:npm/cli.git#v1.0.27
 | |
| git+ssh://git@github.com:npm/cli#semver:^5.0
 | |
| git+https://isaacs@github.com/npm/cli.git
 | |
| git://github.com/npm/cli.git#v1.0.27</code></pre><h3 id="github-urls">GitHub URLs</h3>
 | |
| <p>As of version 1.1.65, you can refer to GitHub urls as just "foo":
 | |
| "user/foo-project".  Just as with git URLs, a <code>commit-ish</code> suffix can be
 | |
| included.  For example:</p>
 | |
| <pre><code>{
 | |
|   "name": "foo",
 | |
|   "version": "0.0.0",
 | |
|   "dependencies": {
 | |
|     "express": "expressjs/express",
 | |
|     "mocha": "mochajs/mocha#4727d357ea",
 | |
|     "module": "user/repo#feature\/branch"
 | |
|   }
 | |
| }</code></pre><h3 id="local-paths">Local Paths</h3>
 | |
| <p>As of version 2.0.0 you can provide a path to a local directory that contains a
 | |
| package. Local paths can be saved using <code>npm install -S</code> or
 | |
| <code>npm install --save</code>, using any of these forms:</p>
 | |
| <pre><code>../foo/bar
 | |
| ~/foo/bar
 | |
| ./foo/bar
 | |
| /foo/bar</code></pre><p>in which case they will be normalized to a relative path and added to your
 | |
| <code>package.json</code>. For example:</p>
 | |
| <pre><code>{
 | |
|   "name": "baz",
 | |
|   "dependencies": {
 | |
|     "bar": "file:../foo/bar"
 | |
|   }
 | |
| }</code></pre><p>This feature is helpful for local offline development and creating
 | |
| tests that require npm installing where you don't want to hit an
 | |
| external server, but should not be used when publishing packages
 | |
| to the public registry.</p>
 | |
| <h2 id="devdependencies">devDependencies</h2>
 | |
| <p>If someone is planning on downloading and using your module in their
 | |
| program, then they probably don't want or need to download and build
 | |
| the external test or documentation framework that you use.</p>
 | |
| <p>In this case, it's best to map these additional items in a <code>devDependencies</code>
 | |
| object.</p>
 | |
| <p>These things will be installed when doing <code>npm link</code> or <code>npm install</code>
 | |
| from the root of a package, and can be managed like any other npm
 | |
| configuration param.  See <code><a href="../misc/npm-config.html">npm-config(7)</a></code> for more on the topic.</p>
 | |
| <p>For build steps that are not platform-specific, such as compiling
 | |
| CoffeeScript or other languages to JavaScript, use the <code>prepare</code>
 | |
| script to do this, and make the required package a devDependency.</p>
 | |
| <p>For example:</p>
 | |
| <pre><code>{ "name": "ethopia-waza",
 | |
|   "description": "a delightfully fruity coffee varietal",
 | |
|   "version": "1.2.3",
 | |
|   "devDependencies": {
 | |
|     "coffee-script": "~1.6.3"
 | |
|   },
 | |
|   "scripts": {
 | |
|     "prepare": "coffee -o lib/ -c src/waza.coffee"
 | |
|   },
 | |
|   "main": "lib/waza.js"
 | |
| }</code></pre><p>The <code>prepare</code> script will be run before publishing, so that users
 | |
| can consume the functionality without requiring them to compile it
 | |
| themselves.  In dev mode (ie, locally running <code>npm install</code>), it'll
 | |
| run this script as well, so that you can test it easily.</p>
 | |
| <h2 id="peerdependencies">peerDependencies</h2>
 | |
| <p>In some cases, you want to express the compatibility of your package with a
 | |
| host tool or library, while not necessarily doing a <code>require</code> of this host.
 | |
| This is usually referred to as a <em>plugin</em>. Notably, your module may be exposing
 | |
| a specific interface, expected and specified by the host documentation.</p>
 | |
| <p>For example:</p>
 | |
| <pre><code>{
 | |
|   "name": "tea-latte",
 | |
|   "version": "1.3.5",
 | |
|   "peerDependencies": {
 | |
|     "tea": "2.x"
 | |
|   }
 | |
| }</code></pre><p>This ensures your package <code>tea-latte</code> can be installed <em>along</em> with the second
 | |
| major version of the host package <code>tea</code> only. <code>npm install tea-latte</code> could
 | |
| possibly yield the following dependency graph:</p>
 | |
| <pre><code>├── tea-latte@1.3.5
 | |
| └── tea@2.2.0</code></pre><p><strong>NOTE: npm versions 1 and 2 will automatically install <code>peerDependencies</code> if
 | |
| they are not explicitly depended upon higher in the dependency tree. In the
 | |
| next major version of npm (npm@3), this will no longer be the case. You will
 | |
| receive a warning that the peerDependency is not installed instead.</strong> The
 | |
| behavior in npms 1 & 2 was frequently confusing and could easily put you into
 | |
| dependency hell, a situation that npm is designed to avoid as much as possible.</p>
 | |
| <p>Trying to install another plugin with a conflicting requirement will cause an
 | |
| error. For this reason, make sure your plugin requirement is as broad as
 | |
| possible, and not to lock it down to specific patch versions.</p>
 | |
| <p>Assuming the host complies with <a href="https://semver.org/">semver</a>, only changes in
 | |
| the host package's major version will break your plugin. Thus, if you've worked
 | |
| with every 1.x version of the host package, use <code>"^1.0"</code> or <code>"1.x"</code> to express
 | |
| this. If you depend on features introduced in 1.5.2, use <code>">= 1.5.2 < 2"</code>.</p>
 | |
| <h2 id="bundleddependencies">bundledDependencies</h2>
 | |
| <p>This defines an array of package names that will be bundled when publishing
 | |
| the package.</p>
 | |
| <p>In cases where you need to preserve npm packages locally or have them
 | |
| available through a single file download, you can bundle the packages in a
 | |
| tarball file by specifying the package names in the <code>bundledDependencies</code>
 | |
| array and executing <code>npm pack</code>.</p>
 | |
| <p>For example:</p>
 | |
| <p>If we define a package.json like this:</p>
 | |
| <pre><code>{
 | |
|   "name": "awesome-web-framework",
 | |
|   "version": "1.0.0",
 | |
|   "bundledDependencies": [
 | |
|     "renderized", "super-streams"
 | |
|   ]
 | |
| }</code></pre><p>we can obtain <code>awesome-web-framework-1.0.0.tgz</code> file by running <code>npm pack</code>.
 | |
| This file contains the dependencies <code>renderized</code> and <code>super-streams</code> which
 | |
| can be installed in a new project by executing <code>npm install
 | |
| awesome-web-framework-1.0.0.tgz</code>.</p>
 | |
| <p>If this is spelled <code>"bundleDependencies"</code>, then that is also honored.</p>
 | |
| <h2 id="optionaldependencies">optionalDependencies</h2>
 | |
| <p>If a dependency can be used, but you would like npm to proceed if it cannot be
 | |
| found or fails to install, then you may put it in the <code>optionalDependencies</code>
 | |
| object.  This is a map of package name to version or url, just like the
 | |
| <code>dependencies</code> object.  The difference is that build failures do not cause
 | |
| installation to fail.</p>
 | |
| <p>It is still your program's responsibility to handle the lack of the
 | |
| dependency.  For example, something like this:</p>
 | |
| <pre><code>try {
 | |
|   var foo = require('foo')
 | |
|   var fooVersion = require('foo/package.json').version
 | |
| } catch (er) {
 | |
|   foo = null
 | |
| }
 | |
| if ( notGoodFooVersion(fooVersion) ) {
 | |
|   foo = null
 | |
| }
 | |
| 
 | |
| // .. then later in your program ..
 | |
| 
 | |
| if (foo) {
 | |
|   foo.doFooThings()
 | |
| }</code></pre><p>Entries in <code>optionalDependencies</code> will override entries of the same name in
 | |
| <code>dependencies</code>, so it's usually best to only put in one place.</p>
 | |
| <h2 id="engines">engines</h2>
 | |
| <p>You can specify the version of node that your stuff works on:</p>
 | |
| <pre><code>{ "engines" : { "node" : ">=0.10.3 <0.12" } }</code></pre><p>And, like with dependencies, if you don't specify the version (or if you
 | |
| specify "*" as the version), then any version of node will do.</p>
 | |
| <p>If you specify an "engines" field, then npm will require that "node" be
 | |
| somewhere on that list. If "engines" is omitted, then npm will just assume
 | |
| that it works on node.</p>
 | |
| <p>You can also use the "engines" field to specify which versions of npm
 | |
| are capable of properly installing your program.  For example:</p>
 | |
| <pre><code>{ "engines" : { "npm" : "~1.0.20" } }</code></pre><p>Unless the user has set the <code>engine-strict</code> config flag, this
 | |
| field is advisory only and will only produce warnings when your package is installed as a dependency.</p>
 | |
| <h2 id="enginestrict">engineStrict</h2>
 | |
| <p><strong>This feature was removed in npm 3.0.0</strong></p>
 | |
| <p>Prior to npm 3.0.0, this feature was used to treat this package as if the
 | |
| user had set <code>engine-strict</code>. It is no longer used.</p>
 | |
| <h2 id="os">os</h2>
 | |
| <p>You can specify which operating systems your
 | |
| module will run on:</p>
 | |
| <pre><code>"os" : [ "darwin", "linux" ]</code></pre><p>You can also blacklist instead of whitelist operating systems,
 | |
| just prepend the blacklisted os with a '!':</p>
 | |
| <pre><code>"os" : [ "!win32" ]</code></pre><p>The host operating system is determined by <code>process.platform</code></p>
 | |
| <p>It is allowed to both blacklist, and whitelist, although there isn't any
 | |
| good reason to do this.</p>
 | |
| <h2 id="cpu">cpu</h2>
 | |
| <p>If your code only runs on certain cpu architectures,
 | |
| you can specify which ones.</p>
 | |
| <pre><code>"cpu" : [ "x64", "ia32" ]</code></pre><p>Like the <code>os</code> option, you can also blacklist architectures:</p>
 | |
| <pre><code>"cpu" : [ "!arm", "!mips" ]</code></pre><p>The host architecture is determined by <code>process.arch</code></p>
 | |
| <h2 id="preferglobal">preferGlobal</h2>
 | |
| <p><strong>DEPRECATED</strong></p>
 | |
| <p>This option used to trigger an npm warning, but it will no longer warn. It is
 | |
| purely there for informational purposes. It is now recommended that you install
 | |
| any binaries as local devDependencies wherever possible.</p>
 | |
| <h2 id="private">private</h2>
 | |
| <p>If you set <code>"private": true</code> in your package.json, then npm will refuse
 | |
| to publish it.</p>
 | |
| <p>This is a way to prevent accidental publication of private repositories.  If
 | |
| you would like to ensure that a given package is only ever published to a
 | |
| specific registry (for example, an internal registry), then use the
 | |
| <code>publishConfig</code> dictionary described below to override the <code>registry</code> config
 | |
| param at publish-time.</p>
 | |
| <h2 id="publishconfig">publishConfig</h2>
 | |
| <p>This is a set of config values that will be used at publish-time. It's
 | |
| especially handy if you want to set the tag, registry or access, so that
 | |
| you can ensure that a given package is not tagged with "latest", published
 | |
| to the global public registry or that a scoped module is private by default.</p>
 | |
| <p>Any config values can be overridden, but only "tag", "registry" and "access"
 | |
| probably matter for the purposes of publishing.</p>
 | |
| <p>See <code><a href="../misc/npm-config.html">npm-config(7)</a></code> to see the list of config options that can be
 | |
| overridden.</p>
 | |
| <h2 id="default-values">DEFAULT VALUES</h2>
 | |
| <p>npm will default some values based on package contents.</p>
 | |
| <ul>
 | |
| <li><p><code>"scripts": {"start": "node server.js"}</code></p>
 | |
| <p>If there is a <code>server.js</code> file in the root of your package, then npm
 | |
| will default the <code>start</code> command to <code>node server.js</code>.</p>
 | |
| </li>
 | |
| <li><p><code>"scripts":{"install": "node-gyp rebuild"}</code></p>
 | |
| <p>If there is a <code>binding.gyp</code> file in the root of your package and you have not defined an <code>install</code> or <code>preinstall</code> script, npm will
 | |
| default the <code>install</code> command to compile using node-gyp.</p>
 | |
| </li>
 | |
| <li><p><code>"contributors": [...]</code></p>
 | |
| <p>If there is an <code>AUTHORS</code> file in the root of your package, npm will
 | |
| treat each line as a <code>Name <email> (url)</code> format, where email and url
 | |
| are optional.  Lines which start with a <code>#</code> or are blank, will be
 | |
| ignored.</p>
 | |
| </li>
 | |
| </ul>
 | |
| <h2 id="see-also">SEE ALSO</h2>
 | |
| <ul>
 | |
| <li><a href="../misc/semver.html">semver(7)</a></li>
 | |
| <li><a href="../cli/npm-init.html">npm-init(1)</a></li>
 | |
| <li><a href="../cli/npm-version.html">npm-version(1)</a></li>
 | |
| <li><a href="../cli/npm-config.html">npm-config(1)</a></li>
 | |
| <li><a href="../misc/npm-config.html">npm-config(7)</a></li>
 | |
| <li><a href="../cli/npm-help.html">npm-help(1)</a></li>
 | |
| <li><a href="../cli/npm-install.html">npm-install(1)</a></li>
 | |
| <li><a href="../cli/npm-publish.html">npm-publish(1)</a></li>
 | |
| <li><a href="../cli/npm-uninstall.html">npm-uninstall(1)</a></li>
 | |
| </ul>
 | |
| 
 | |
| </div>
 | |
| 
 | |
| <table border=0 cellspacing=0 cellpadding=0 id=npmlogo>
 | |
| <tr><td style="width:180px;height:10px;background:rgb(237,127,127)" colspan=18> </td></tr>
 | |
| <tr><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)"> </td><td style="width:40px;height:10px;background:#fff" colspan=4> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4> </td><td style="width:40px;height:10px;background:#fff" colspan=4> </td><td rowspan=4 style="width:10px;height:10px;background:rgb(237,127,127)"> </td><td colspan=6 style="width:60px;height:10px;background:#fff"> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=4> </td></tr>
 | |
| <tr><td colspan=2 style="width:20px;height:30px;background:#fff" rowspan=3> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3> </td><td style="width:10px;height:10px;background:#fff" rowspan=3> </td><td style="width:20px;height:10px;background:#fff" rowspan=4 colspan=2> </td><td style="width:10px;height:20px;background:rgb(237,127,127)" rowspan=2> </td><td style="width:10px;height:10px;background:#fff" rowspan=3> </td><td style="width:20px;height:10px;background:#fff" rowspan=3 colspan=2> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3> </td><td style="width:10px;height:10px;background:#fff" rowspan=3> </td><td style="width:10px;height:10px;background:rgb(237,127,127)" rowspan=3> </td></tr>
 | |
| <tr><td style="width:10px;height:10px;background:#fff" rowspan=2> </td></tr>
 | |
| <tr><td style="width:10px;height:10px;background:#fff"> </td></tr>
 | |
| <tr><td style="width:60px;height:10px;background:rgb(237,127,127)" colspan=6> </td><td colspan=10 style="width:10px;height:10px;background:rgb(237,127,127)"> </td></tr>
 | |
| <tr><td colspan=5 style="width:50px;height:10px;background:#fff"> </td><td style="width:40px;height:10px;background:rgb(237,127,127)" colspan=4> </td><td style="width:90px;height:10px;background:#fff" colspan=9> </td></tr>
 | |
| </table>
 | |
| <p id="footer">package.json — npm@6.5.0</p>
 | |
| 
 |