mirror of
https://github.com/S2-/minifyfromhtml.git
synced 2025-08-03 20:30:04 +02:00
update packages to latest version
This commit is contained in:
229
node_modules/npm/man/man5/npm-folders.5
generated
vendored
Normal file
229
node_modules/npm/man/man5/npm-folders.5
generated
vendored
Normal file
@@ -0,0 +1,229 @@
|
||||
.TH "NPM\-FOLDERS" "5" "March 2017" "" ""
|
||||
.SH "NAME"
|
||||
\fBnpm-folders\fR \- Folder Structures Used by npm
|
||||
.SH DESCRIPTION
|
||||
.P
|
||||
npm puts various things on your computer\. That's its job\.
|
||||
.P
|
||||
This document will tell you what it puts where\.
|
||||
.SS tl;dr
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
Local install (default): puts stuff in \fB\|\./node_modules\fP of the current
|
||||
package root\.
|
||||
.IP \(bu 2
|
||||
Global install (with \fB\-g\fP): puts stuff in /usr/local or wherever node
|
||||
is installed\.
|
||||
.IP \(bu 2
|
||||
Install it \fBlocally\fR if you're going to \fBrequire()\fP it\.
|
||||
.IP \(bu 2
|
||||
Install it \fBglobally\fR if you're going to run it on the command line\.
|
||||
.IP \(bu 2
|
||||
If you need both, then install it in both places, or use \fBnpm link\fP\|\.
|
||||
|
||||
.RE
|
||||
.SS prefix Configuration
|
||||
.P
|
||||
The \fBprefix\fP config defaults to the location where node is installed\.
|
||||
On most systems, this is \fB/usr/local\fP\|\. On windows, this is the exact
|
||||
location of the node\.exe binary\. On Unix systems, it's one level up,
|
||||
since node is typically installed at \fB{prefix}/bin/node\fP rather than
|
||||
\fB{prefix}/node\.exe\fP\|\.
|
||||
.P
|
||||
When the \fBglobal\fP flag is set, npm installs things into this prefix\.
|
||||
When it is not set, it uses the root of the current package, or the
|
||||
current working directory if not in a package already\.
|
||||
.SS Node Modules
|
||||
.P
|
||||
Packages are dropped into the \fBnode_modules\fP folder under the \fBprefix\fP\|\.
|
||||
When installing locally, this means that you can
|
||||
\fBrequire("packagename")\fP to load its main module, or
|
||||
\fBrequire("packagename/lib/path/to/sub/module")\fP to load other modules\.
|
||||
.P
|
||||
Global installs on Unix systems go to \fB{prefix}/lib/node_modules\fP\|\.
|
||||
Global installs on Windows go to \fB{prefix}/node_modules\fP (that is, no
|
||||
\fBlib\fP folder\.)
|
||||
.P
|
||||
Scoped packages are installed the same way, except they are grouped together
|
||||
in a sub\-folder of the relevant \fBnode_modules\fP folder with the name of that
|
||||
scope prefix by the @ symbol, e\.g\. \fBnpm install @myorg/package\fP would place
|
||||
the package in \fB{prefix}/node_modules/@myorg/package\fP\|\. See npm help 7 \fBscope\fP for
|
||||
more details\.
|
||||
.P
|
||||
If you wish to \fBrequire()\fP a package, then install it locally\.
|
||||
.SS Executables
|
||||
.P
|
||||
When in global mode, executables are linked into \fB{prefix}/bin\fP on Unix,
|
||||
or directly into \fB{prefix}\fP on Windows\.
|
||||
.P
|
||||
When in local mode, executables are linked into
|
||||
\fB\|\./node_modules/\.bin\fP so that they can be made available to scripts run
|
||||
through npm\. (For example, so that a test runner will be in the path
|
||||
when you run \fBnpm test\fP\|\.)
|
||||
.SS Man Pages
|
||||
.P
|
||||
When in global mode, man pages are linked into \fB{prefix}/share/man\fP\|\.
|
||||
.P
|
||||
When in local mode, man pages are not installed\.
|
||||
.P
|
||||
Man pages are not installed on Windows systems\.
|
||||
.SS Cache
|
||||
.P
|
||||
See npm help \fBnpm\-cache\fP\|\. Cache files are stored in \fB~/\.npm\fP on Posix, or
|
||||
\fB~/npm\-cache\fP on Windows\.
|
||||
.P
|
||||
This is controlled by the \fBcache\fP configuration param\.
|
||||
.SS Temp Files
|
||||
.P
|
||||
Temporary files are stored by default in the folder specified by the
|
||||
\fBtmp\fP config, which defaults to the TMPDIR, TMP, or TEMP environment
|
||||
variables, or \fB/tmp\fP on Unix and \fBc:\\windows\\temp\fP on Windows\.
|
||||
.P
|
||||
Temp files are given a unique folder under this root for each run of the
|
||||
program, and are deleted upon successful exit\.
|
||||
.SH More Information
|
||||
.P
|
||||
When installing locally, npm first tries to find an appropriate
|
||||
\fBprefix\fP folder\. This is so that \fBnpm install foo@1\.2\.3\fP will install
|
||||
to the sensible root of your package, even if you happen to have \fBcd\fPed
|
||||
into some other folder\.
|
||||
.P
|
||||
Starting at the $PWD, npm will walk up the folder tree checking for a
|
||||
folder that contains either a \fBpackage\.json\fP file, or a \fBnode_modules\fP
|
||||
folder\. If such a thing is found, then that is treated as the effective
|
||||
"current directory" for the purpose of running npm commands\. (This
|
||||
behavior is inspired by and similar to git's \.git\-folder seeking
|
||||
logic when running git commands in a working dir\.)
|
||||
.P
|
||||
If no package root is found, then the current folder is used\.
|
||||
.P
|
||||
When you run \fBnpm install foo@1\.2\.3\fP, then the package is loaded into
|
||||
the cache, and then unpacked into \fB\|\./node_modules/foo\fP\|\. Then, any of
|
||||
foo's dependencies are similarly unpacked into
|
||||
\fB\|\./node_modules/foo/node_modules/\.\.\.\fP\|\.
|
||||
.P
|
||||
Any bin files are symlinked to \fB\|\./node_modules/\.bin/\fP, so that they may
|
||||
be found by npm scripts when necessary\.
|
||||
.SS Global Installation
|
||||
.P
|
||||
If the \fBglobal\fP configuration is set to true, then npm will
|
||||
install packages "globally"\.
|
||||
.P
|
||||
For global installation, packages are installed roughly the same way,
|
||||
but using the folders described above\.
|
||||
.SS Cycles, Conflicts, and Folder Parsimony
|
||||
.P
|
||||
Cycles are handled using the property of node's module system that it
|
||||
walks up the directories looking for \fBnode_modules\fP folders\. So, at every
|
||||
stage, if a package is already installed in an ancestor \fBnode_modules\fP
|
||||
folder, then it is not installed at the current location\.
|
||||
.P
|
||||
Consider the case above, where \fBfoo \-> bar \-> baz\fP\|\. Imagine if, in
|
||||
addition to that, baz depended on bar, so you'd have:
|
||||
\fBfoo \-> bar \-> baz \-> bar \-> baz \.\.\.\fP\|\. However, since the folder
|
||||
structure is: \fBfoo/node_modules/bar/node_modules/baz\fP, there's no need to
|
||||
put another copy of bar into \fB\|\.\.\./baz/node_modules\fP, since when it calls
|
||||
require("bar"), it will get the copy that is installed in
|
||||
\fBfoo/node_modules/bar\fP\|\.
|
||||
.P
|
||||
This shortcut is only used if the exact same
|
||||
version would be installed in multiple nested \fBnode_modules\fP folders\. It
|
||||
is still possible to have \fBa/node_modules/b/node_modules/a\fP if the two
|
||||
"a" packages are different versions\. However, without repeating the
|
||||
exact same package multiple times, an infinite regress will always be
|
||||
prevented\.
|
||||
.P
|
||||
Another optimization can be made by installing dependencies at the
|
||||
highest level possible, below the localized "target" folder\.
|
||||
.SS Example
|
||||
.P
|
||||
Consider this dependency graph:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
foo
|
||||
+\-\- blerg@1\.2\.5
|
||||
+\-\- bar@1\.2\.3
|
||||
| +\-\- blerg@1\.x (latest=1\.3\.7)
|
||||
| +\-\- baz@2\.x
|
||||
| | `\-\- quux@3\.x
|
||||
| | `\-\- bar@1\.2\.3 (cycle)
|
||||
| `\-\- asdf@*
|
||||
`\-\- baz@1\.2\.3
|
||||
`\-\- quux@3\.x
|
||||
`\-\- bar
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
In this case, we might expect a folder structure like this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
foo
|
||||
+\-\- node_modules
|
||||
+\-\- blerg (1\.2\.5) <\-\-\-[A]
|
||||
+\-\- bar (1\.2\.3) <\-\-\-[B]
|
||||
| `\-\- node_modules
|
||||
| +\-\- baz (2\.0\.2) <\-\-\-[C]
|
||||
| | `\-\- node_modules
|
||||
| | `\-\- quux (3\.2\.0)
|
||||
| `\-\- asdf (2\.3\.4)
|
||||
`\-\- baz (1\.2\.3) <\-\-\-[D]
|
||||
`\-\- node_modules
|
||||
`\-\- quux (3\.2\.0) <\-\-\-[E]
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Since foo depends directly on \fBbar@1\.2\.3\fP and \fBbaz@1\.2\.3\fP, those are
|
||||
installed in foo's \fBnode_modules\fP folder\.
|
||||
.P
|
||||
Even though the latest copy of blerg is 1\.3\.7, foo has a specific
|
||||
dependency on version 1\.2\.5\. So, that gets installed at [A]\. Since the
|
||||
parent installation of blerg satisfies bar's dependency on \fBblerg@1\.x\fP,
|
||||
it does not install another copy under [B]\.
|
||||
.P
|
||||
Bar [B] also has dependencies on baz and asdf, so those are installed in
|
||||
bar's \fBnode_modules\fP folder\. Because it depends on \fBbaz@2\.x\fP, it cannot
|
||||
re\-use the \fBbaz@1\.2\.3\fP installed in the parent \fBnode_modules\fP folder [D],
|
||||
and must install its own copy [C]\.
|
||||
.P
|
||||
Underneath bar, the \fBbaz \-> quux \-> bar\fP dependency creates a cycle\.
|
||||
However, because bar is already in quux's ancestry [B], it does not
|
||||
unpack another copy of bar into that folder\.
|
||||
.P
|
||||
Underneath \fBfoo \-> baz\fP [D], quux's [E] folder tree is empty, because its
|
||||
dependency on bar is satisfied by the parent folder copy installed at [B]\.
|
||||
.P
|
||||
For a graphical breakdown of what is installed where, use \fBnpm ls\fP\|\.
|
||||
.SS Publishing
|
||||
.P
|
||||
Upon publishing, npm will look in the \fBnode_modules\fP folder\. If any of
|
||||
the items there are not in the \fBbundledDependencies\fP array, then they will
|
||||
not be included in the package tarball\.
|
||||
.P
|
||||
This allows a package maintainer to install all of their dependencies
|
||||
(and dev dependencies) locally, but only re\-publish those items that
|
||||
cannot be found elsewhere\. See npm help 5 \fBpackage\.json\fP for more information\.
|
||||
.SH SEE ALSO
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
npm help 7 faq
|
||||
.IP \(bu 2
|
||||
npm help 5 package\.json
|
||||
.IP \(bu 2
|
||||
npm help install
|
||||
.IP \(bu 2
|
||||
npm help pack
|
||||
.IP \(bu 2
|
||||
npm help cache
|
||||
.IP \(bu 2
|
||||
npm help config
|
||||
.IP \(bu 2
|
||||
npm help 5 npmrc
|
||||
.IP \(bu 2
|
||||
npm help 7 config
|
||||
.IP \(bu 2
|
||||
npm help publish
|
||||
|
||||
.RE
|
||||
|
229
node_modules/npm/man/man5/npm-global.5
generated
vendored
Normal file
229
node_modules/npm/man/man5/npm-global.5
generated
vendored
Normal file
@@ -0,0 +1,229 @@
|
||||
.TH "NPM\-FOLDERS" "5" "March 2017" "" ""
|
||||
.SH "NAME"
|
||||
\fBnpm-folders\fR \- Folder Structures Used by npm
|
||||
.SH DESCRIPTION
|
||||
.P
|
||||
npm puts various things on your computer\. That's its job\.
|
||||
.P
|
||||
This document will tell you what it puts where\.
|
||||
.SS tl;dr
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
Local install (default): puts stuff in \fB\|\./node_modules\fP of the current
|
||||
package root\.
|
||||
.IP \(bu 2
|
||||
Global install (with \fB\-g\fP): puts stuff in /usr/local or wherever node
|
||||
is installed\.
|
||||
.IP \(bu 2
|
||||
Install it \fBlocally\fR if you're going to \fBrequire()\fP it\.
|
||||
.IP \(bu 2
|
||||
Install it \fBglobally\fR if you're going to run it on the command line\.
|
||||
.IP \(bu 2
|
||||
If you need both, then install it in both places, or use \fBnpm link\fP\|\.
|
||||
|
||||
.RE
|
||||
.SS prefix Configuration
|
||||
.P
|
||||
The \fBprefix\fP config defaults to the location where node is installed\.
|
||||
On most systems, this is \fB/usr/local\fP\|\. On windows, this is the exact
|
||||
location of the node\.exe binary\. On Unix systems, it's one level up,
|
||||
since node is typically installed at \fB{prefix}/bin/node\fP rather than
|
||||
\fB{prefix}/node\.exe\fP\|\.
|
||||
.P
|
||||
When the \fBglobal\fP flag is set, npm installs things into this prefix\.
|
||||
When it is not set, it uses the root of the current package, or the
|
||||
current working directory if not in a package already\.
|
||||
.SS Node Modules
|
||||
.P
|
||||
Packages are dropped into the \fBnode_modules\fP folder under the \fBprefix\fP\|\.
|
||||
When installing locally, this means that you can
|
||||
\fBrequire("packagename")\fP to load its main module, or
|
||||
\fBrequire("packagename/lib/path/to/sub/module")\fP to load other modules\.
|
||||
.P
|
||||
Global installs on Unix systems go to \fB{prefix}/lib/node_modules\fP\|\.
|
||||
Global installs on Windows go to \fB{prefix}/node_modules\fP (that is, no
|
||||
\fBlib\fP folder\.)
|
||||
.P
|
||||
Scoped packages are installed the same way, except they are grouped together
|
||||
in a sub\-folder of the relevant \fBnode_modules\fP folder with the name of that
|
||||
scope prefix by the @ symbol, e\.g\. \fBnpm install @myorg/package\fP would place
|
||||
the package in \fB{prefix}/node_modules/@myorg/package\fP\|\. See npm help 7 \fBscope\fP for
|
||||
more details\.
|
||||
.P
|
||||
If you wish to \fBrequire()\fP a package, then install it locally\.
|
||||
.SS Executables
|
||||
.P
|
||||
When in global mode, executables are linked into \fB{prefix}/bin\fP on Unix,
|
||||
or directly into \fB{prefix}\fP on Windows\.
|
||||
.P
|
||||
When in local mode, executables are linked into
|
||||
\fB\|\./node_modules/\.bin\fP so that they can be made available to scripts run
|
||||
through npm\. (For example, so that a test runner will be in the path
|
||||
when you run \fBnpm test\fP\|\.)
|
||||
.SS Man Pages
|
||||
.P
|
||||
When in global mode, man pages are linked into \fB{prefix}/share/man\fP\|\.
|
||||
.P
|
||||
When in local mode, man pages are not installed\.
|
||||
.P
|
||||
Man pages are not installed on Windows systems\.
|
||||
.SS Cache
|
||||
.P
|
||||
See npm help \fBnpm\-cache\fP\|\. Cache files are stored in \fB~/\.npm\fP on Posix, or
|
||||
\fB~/npm\-cache\fP on Windows\.
|
||||
.P
|
||||
This is controlled by the \fBcache\fP configuration param\.
|
||||
.SS Temp Files
|
||||
.P
|
||||
Temporary files are stored by default in the folder specified by the
|
||||
\fBtmp\fP config, which defaults to the TMPDIR, TMP, or TEMP environment
|
||||
variables, or \fB/tmp\fP on Unix and \fBc:\\windows\\temp\fP on Windows\.
|
||||
.P
|
||||
Temp files are given a unique folder under this root for each run of the
|
||||
program, and are deleted upon successful exit\.
|
||||
.SH More Information
|
||||
.P
|
||||
When installing locally, npm first tries to find an appropriate
|
||||
\fBprefix\fP folder\. This is so that \fBnpm install foo@1\.2\.3\fP will install
|
||||
to the sensible root of your package, even if you happen to have \fBcd\fPed
|
||||
into some other folder\.
|
||||
.P
|
||||
Starting at the $PWD, npm will walk up the folder tree checking for a
|
||||
folder that contains either a \fBpackage\.json\fP file, or a \fBnode_modules\fP
|
||||
folder\. If such a thing is found, then that is treated as the effective
|
||||
"current directory" for the purpose of running npm commands\. (This
|
||||
behavior is inspired by and similar to git's \.git\-folder seeking
|
||||
logic when running git commands in a working dir\.)
|
||||
.P
|
||||
If no package root is found, then the current folder is used\.
|
||||
.P
|
||||
When you run \fBnpm install foo@1\.2\.3\fP, then the package is loaded into
|
||||
the cache, and then unpacked into \fB\|\./node_modules/foo\fP\|\. Then, any of
|
||||
foo's dependencies are similarly unpacked into
|
||||
\fB\|\./node_modules/foo/node_modules/\.\.\.\fP\|\.
|
||||
.P
|
||||
Any bin files are symlinked to \fB\|\./node_modules/\.bin/\fP, so that they may
|
||||
be found by npm scripts when necessary\.
|
||||
.SS Global Installation
|
||||
.P
|
||||
If the \fBglobal\fP configuration is set to true, then npm will
|
||||
install packages "globally"\.
|
||||
.P
|
||||
For global installation, packages are installed roughly the same way,
|
||||
but using the folders described above\.
|
||||
.SS Cycles, Conflicts, and Folder Parsimony
|
||||
.P
|
||||
Cycles are handled using the property of node's module system that it
|
||||
walks up the directories looking for \fBnode_modules\fP folders\. So, at every
|
||||
stage, if a package is already installed in an ancestor \fBnode_modules\fP
|
||||
folder, then it is not installed at the current location\.
|
||||
.P
|
||||
Consider the case above, where \fBfoo \-> bar \-> baz\fP\|\. Imagine if, in
|
||||
addition to that, baz depended on bar, so you'd have:
|
||||
\fBfoo \-> bar \-> baz \-> bar \-> baz \.\.\.\fP\|\. However, since the folder
|
||||
structure is: \fBfoo/node_modules/bar/node_modules/baz\fP, there's no need to
|
||||
put another copy of bar into \fB\|\.\.\./baz/node_modules\fP, since when it calls
|
||||
require("bar"), it will get the copy that is installed in
|
||||
\fBfoo/node_modules/bar\fP\|\.
|
||||
.P
|
||||
This shortcut is only used if the exact same
|
||||
version would be installed in multiple nested \fBnode_modules\fP folders\. It
|
||||
is still possible to have \fBa/node_modules/b/node_modules/a\fP if the two
|
||||
"a" packages are different versions\. However, without repeating the
|
||||
exact same package multiple times, an infinite regress will always be
|
||||
prevented\.
|
||||
.P
|
||||
Another optimization can be made by installing dependencies at the
|
||||
highest level possible, below the localized "target" folder\.
|
||||
.SS Example
|
||||
.P
|
||||
Consider this dependency graph:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
foo
|
||||
+\-\- blerg@1\.2\.5
|
||||
+\-\- bar@1\.2\.3
|
||||
| +\-\- blerg@1\.x (latest=1\.3\.7)
|
||||
| +\-\- baz@2\.x
|
||||
| | `\-\- quux@3\.x
|
||||
| | `\-\- bar@1\.2\.3 (cycle)
|
||||
| `\-\- asdf@*
|
||||
`\-\- baz@1\.2\.3
|
||||
`\-\- quux@3\.x
|
||||
`\-\- bar
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
In this case, we might expect a folder structure like this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
foo
|
||||
+\-\- node_modules
|
||||
+\-\- blerg (1\.2\.5) <\-\-\-[A]
|
||||
+\-\- bar (1\.2\.3) <\-\-\-[B]
|
||||
| `\-\- node_modules
|
||||
| +\-\- baz (2\.0\.2) <\-\-\-[C]
|
||||
| | `\-\- node_modules
|
||||
| | `\-\- quux (3\.2\.0)
|
||||
| `\-\- asdf (2\.3\.4)
|
||||
`\-\- baz (1\.2\.3) <\-\-\-[D]
|
||||
`\-\- node_modules
|
||||
`\-\- quux (3\.2\.0) <\-\-\-[E]
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Since foo depends directly on \fBbar@1\.2\.3\fP and \fBbaz@1\.2\.3\fP, those are
|
||||
installed in foo's \fBnode_modules\fP folder\.
|
||||
.P
|
||||
Even though the latest copy of blerg is 1\.3\.7, foo has a specific
|
||||
dependency on version 1\.2\.5\. So, that gets installed at [A]\. Since the
|
||||
parent installation of blerg satisfies bar's dependency on \fBblerg@1\.x\fP,
|
||||
it does not install another copy under [B]\.
|
||||
.P
|
||||
Bar [B] also has dependencies on baz and asdf, so those are installed in
|
||||
bar's \fBnode_modules\fP folder\. Because it depends on \fBbaz@2\.x\fP, it cannot
|
||||
re\-use the \fBbaz@1\.2\.3\fP installed in the parent \fBnode_modules\fP folder [D],
|
||||
and must install its own copy [C]\.
|
||||
.P
|
||||
Underneath bar, the \fBbaz \-> quux \-> bar\fP dependency creates a cycle\.
|
||||
However, because bar is already in quux's ancestry [B], it does not
|
||||
unpack another copy of bar into that folder\.
|
||||
.P
|
||||
Underneath \fBfoo \-> baz\fP [D], quux's [E] folder tree is empty, because its
|
||||
dependency on bar is satisfied by the parent folder copy installed at [B]\.
|
||||
.P
|
||||
For a graphical breakdown of what is installed where, use \fBnpm ls\fP\|\.
|
||||
.SS Publishing
|
||||
.P
|
||||
Upon publishing, npm will look in the \fBnode_modules\fP folder\. If any of
|
||||
the items there are not in the \fBbundledDependencies\fP array, then they will
|
||||
not be included in the package tarball\.
|
||||
.P
|
||||
This allows a package maintainer to install all of their dependencies
|
||||
(and dev dependencies) locally, but only re\-publish those items that
|
||||
cannot be found elsewhere\. See npm help 5 \fBpackage\.json\fP for more information\.
|
||||
.SH SEE ALSO
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
npm help 7 faq
|
||||
.IP \(bu 2
|
||||
npm help 5 package\.json
|
||||
.IP \(bu 2
|
||||
npm help install
|
||||
.IP \(bu 2
|
||||
npm help pack
|
||||
.IP \(bu 2
|
||||
npm help cache
|
||||
.IP \(bu 2
|
||||
npm help config
|
||||
.IP \(bu 2
|
||||
npm help 5 npmrc
|
||||
.IP \(bu 2
|
||||
npm help 7 config
|
||||
.IP \(bu 2
|
||||
npm help publish
|
||||
|
||||
.RE
|
||||
|
923
node_modules/npm/man/man5/npm-json.5
generated
vendored
Normal file
923
node_modules/npm/man/man5/npm-json.5
generated
vendored
Normal file
@@ -0,0 +1,923 @@
|
||||
.TH "PACKAGE\.JSON" "5" "March 2017" "" ""
|
||||
.SH "NAME"
|
||||
\fBpackage.json\fR \- Specifics of npm's package\.json handling
|
||||
.SH DESCRIPTION
|
||||
.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
|
||||
A lot of the behavior described in this document is affected by the config
|
||||
settings described in npm help 7 \fBnpm\-config\fP\|\.
|
||||
.SH name
|
||||
.P
|
||||
The \fImost\fR important things in your package\.json are the name and version fields\.
|
||||
Those are actually required, and your package won't install without
|
||||
them\. 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\.
|
||||
.P
|
||||
The name is what your thing is called\.
|
||||
.P
|
||||
Some rules:
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
The name must be less than or equal to 214 characters\. This includes the scope for
|
||||
scoped packages\.
|
||||
.IP \(bu 2
|
||||
The name can't start with a dot or an underscore\.
|
||||
.IP \(bu 2
|
||||
New packages must not have uppercase letters in the name\.
|
||||
.IP \(bu 2
|
||||
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\.
|
||||
|
||||
.RE
|
||||
.P
|
||||
Some tips:
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
Don't use the same name as a core Node module\.
|
||||
.IP \(bu 2
|
||||
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\.)
|
||||
.IP \(bu 2
|
||||
The name will probably be passed as an argument to require(), so it should
|
||||
be something short, but also reasonably descriptive\.
|
||||
.IP \(bu 2
|
||||
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\. https://www\.npmjs\.com/
|
||||
|
||||
.RE
|
||||
.P
|
||||
A name can be optionally prefixed by a scope, e\.g\. \fB@myorg/mypackage\fP\|\. See
|
||||
npm help 7 \fBnpm\-scope\fP for more detail\.
|
||||
.SH version
|
||||
.P
|
||||
The \fImost\fR important things in your package\.json are the name and version fields\.
|
||||
Those are actually required, and your package won't install without
|
||||
them\. 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\.
|
||||
.P
|
||||
Version must be parseable by
|
||||
node\-semver \fIhttps://github\.com/isaacs/node\-semver\fR, which is bundled
|
||||
with npm as a dependency\. (\fBnpm install semver\fP to use it yourself\.)
|
||||
.P
|
||||
More on version numbers and ranges at npm help 7 semver\.
|
||||
.SH description
|
||||
.P
|
||||
Put a description in it\. It's a string\. This helps people discover your
|
||||
package, as it's listed in \fBnpm search\fP\|\.
|
||||
.SH keywords
|
||||
.P
|
||||
Put keywords in it\. It's an array of strings\. This helps people
|
||||
discover your package as it's listed in \fBnpm search\fP\|\.
|
||||
.SH homepage
|
||||
.P
|
||||
The url to the project homepage\.
|
||||
.P
|
||||
\fBNOTE\fR: This is \fInot\fR the same as "url"\. If you put a "url" field,
|
||||
then the registry will think it's a redirection to your package that has
|
||||
been published somewhere else, and spit at you\.
|
||||
.P
|
||||
Literally\. Spit\. I'm so not kidding\.
|
||||
.SH bugs
|
||||
.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
|
||||
It should look like this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "url" : "https://github\.com/owner/project/issues"
|
||||
, "email" : "project@hostname\.com"
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.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
|
||||
If a url is provided, it will be used by the \fBnpm bugs\fP command\.
|
||||
.SH license
|
||||
.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
|
||||
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
|
||||
.RS 2
|
||||
.nf
|
||||
{ "license" : "BSD\-3\-Clause" }
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
You can check the full list of SPDX license IDs \fIhttps://spdx\.org/licenses/\fR\|\.
|
||||
Ideally you should pick one that is
|
||||
OSI \fIhttps://opensource\.org/licenses/alphabetical\fR approved\.
|
||||
.P
|
||||
If your package is licensed under multiple common licenses, use an SPDX license
|
||||
expression syntax version 2\.0 string \fIhttps://npmjs\.com/package/spdx\fR, like this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "license" : "(ISC OR GPL\-3\.0)" }
|
||||
.fi
|
||||
.RE
|
||||
.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
|
||||
.RS 2
|
||||
.nf
|
||||
{ "license" : "SEE LICENSE IN <filename>" }
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Then include a file named \fB<filename>\fP at the top level of the package\.
|
||||
.P
|
||||
Some old packages used license objects or a "licenses" property containing an
|
||||
array of license objects:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
// Not valid metadata
|
||||
{ "license" :
|
||||
{ "type" : "ISC"
|
||||
, "url" : "http://opensource\.org/licenses/ISC"
|
||||
}
|
||||
}
|
||||
|
||||
// Not valid metadata
|
||||
{ "licenses" :
|
||||
[
|
||||
{ "type": "MIT"
|
||||
, "url": "http://www\.opensource\.org/licenses/mit\-license\.php"
|
||||
}
|
||||
, { "type": "Apache\-2\.0"
|
||||
, "url": "http://opensource\.org/licenses/apache2\.0\.php"
|
||||
}
|
||||
]
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Those styles are now deprecated\. Instead, use SPDX expressions, like this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "license": "ISC" }
|
||||
|
||||
{ "license": "(MIT OR Apache\-2\.0)" }
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Finally, if you do not wish to grant others the right to use a private or
|
||||
unpublished package under any terms:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "license": "UNLICENSED"}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Consider also setting \fB"private": true\fP to prevent accidental publication\.
|
||||
.SH people fields: author, contributors
|
||||
.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
|
||||
.RS 2
|
||||
.nf
|
||||
{ "name" : "Barney Rubble"
|
||||
, "email" : "b@rubble\.com"
|
||||
, "url" : "http://barnyrubble\.tumblr\.com/"
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Or you can shorten that all into a single string, and npm will parse it for you:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
"Barney Rubble <b@rubble\.com> (http://barnyrubble\.tumblr\.com/)"
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Both email and url are optional either way\.
|
||||
.P
|
||||
npm also sets a top\-level "maintainers" field with your npm user info\.
|
||||
.SH files
|
||||
.P
|
||||
The "files" field is an array of files to include in your project\. If
|
||||
you name a folder in the array, then it will also include the files
|
||||
inside that folder\. (Unless they would be ignored by another rule\.)
|
||||
.P
|
||||
You can also provide a "\.npmignore" file in the root of your package or
|
||||
in subdirectories, which will keep files from being included, even
|
||||
if they would be picked up by the files array\. The \fB\|\.npmignore\fP file
|
||||
works just like a \fB\|\.gitignore\fP\|\.
|
||||
.P
|
||||
Certain files are always included, regardless of settings:
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
\fBpackage\.json\fP
|
||||
.IP \(bu 2
|
||||
\fBREADME\fP
|
||||
.IP \(bu 2
|
||||
\fBCHANGES\fP / \fBCHANGELOG\fP / \fBHISTORY\fP (any casing and file extension)
|
||||
.IP \(bu 2
|
||||
\fBLICENSE\fP / \fBLICENCE\fP
|
||||
.IP \(bu 2
|
||||
The file in the "main" field
|
||||
|
||||
.RE
|
||||
.P
|
||||
Conversely, some files are always ignored:
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
\fB\|\.git\fP
|
||||
.IP \(bu 2
|
||||
\fBCVS\fP
|
||||
.IP \(bu 2
|
||||
\fB\|\.svn\fP
|
||||
.IP \(bu 2
|
||||
\fB\|\.hg\fP
|
||||
.IP \(bu 2
|
||||
\fB\|\.lock\-wscript\fP
|
||||
.IP \(bu 2
|
||||
\fB\|\.wafpickle\-N\fP
|
||||
.IP \(bu 2
|
||||
\fB\|\.*\.swp\fP
|
||||
.IP \(bu 2
|
||||
\fB\|\.DS_Store\fP
|
||||
.IP \(bu 2
|
||||
\fB\|\._*\fP
|
||||
.IP \(bu 2
|
||||
\fBnpm\-debug\.log\fP
|
||||
.IP \(bu 2
|
||||
\fB\|\.npmrc\fP
|
||||
.IP \(bu 2
|
||||
\fBnode_modules\fP
|
||||
|
||||
.RE
|
||||
.SH main
|
||||
.P
|
||||
The main field is a module ID that is the primary entry point to your program\.
|
||||
That is, if your package is named \fBfoo\fP, and a user installs it, and then does
|
||||
\fBrequire("foo")\fP, then your main module's exports object will be returned\.
|
||||
.P
|
||||
This should be a module ID relative to the root of your package folder\.
|
||||
.P
|
||||
For most modules, it makes the most sense to have a main script and often not
|
||||
much else\.
|
||||
.SH bin
|
||||
.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
|
||||
To use this, supply a \fBbin\fP field in your package\.json which is a map of
|
||||
command name to local file name\. On install, npm will symlink that file into
|
||||
\fBprefix/bin\fP for global installs, or \fB\|\./node_modules/\.bin/\fP for local
|
||||
installs\.
|
||||
.P
|
||||
For example, myapp could have this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "bin" : { "myapp" : "\./cli\.js" } }
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
So, when you install myapp, it'll create a symlink from the \fBcli\.js\fP script to
|
||||
\fB/usr/local/bin/myapp\fP\|\.
|
||||
.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
|
||||
.RS 2
|
||||
.nf
|
||||
{ "name": "my\-program"
|
||||
, "version": "1\.2\.5"
|
||||
, "bin": "\./path/to/program" }
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
would be the same as this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "name": "my\-program"
|
||||
, "version": "1\.2\.5"
|
||||
, "bin" : { "my\-program" : "\./path/to/program" } }
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Please make sure that your file(s) referenced in \fBbin\fP starts with
|
||||
\fB#!/usr/bin/env node\fP, otherwise the scripts are started without the node
|
||||
executable!
|
||||
.SH man
|
||||
.P
|
||||
Specify either a single file or an array of filenames to put in place for the
|
||||
\fBman\fP program to find\.
|
||||
.P
|
||||
If only a single file is provided, then it's installed such that it is the
|
||||
result from \fBman <pkgname>\fP, regardless of its actual filename\. For example:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "name" : "foo"
|
||||
, "version" : "1\.2\.3"
|
||||
, "description" : "A packaged foo fooer for fooing foos"
|
||||
, "main" : "foo\.js"
|
||||
, "man" : "\./man/doc\.1"
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
would link the \fB\|\./man/doc\.1\fP file in such that it is the target for \fBman foo\fP
|
||||
.P
|
||||
If the filename doesn't start with the package name, then it's prefixed\.
|
||||
So, this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "name" : "foo"
|
||||
, "version" : "1\.2\.3"
|
||||
, "description" : "A packaged foo fooer for fooing foos"
|
||||
, "main" : "foo\.js"
|
||||
, "man" : [ "\./man/foo\.1", "\./man/bar\.1" ]
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
will create files to do \fBman foo\fP and \fBman foo\-bar\fP\|\.
|
||||
.P
|
||||
Man files must end with a number, and optionally a \fB\|\.gz\fP suffix if they are
|
||||
compressed\. The number dictates which man section the file is installed into\.
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "name" : "foo"
|
||||
, "version" : "1\.2\.3"
|
||||
, "description" : "A packaged foo fooer for fooing foos"
|
||||
, "main" : "foo\.js"
|
||||
, "man" : [ "\./man/foo\.1", "\./man/foo\.2" ]
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
will create entries for \fBman foo\fP and \fBman 2 foo\fP
|
||||
.SH directories
|
||||
.P
|
||||
The CommonJS Packages \fIhttp://wiki\.commonjs\.org/wiki/Packages/1\.0\fR spec details a
|
||||
few ways that you can indicate the structure of your package using a \fBdirectories\fP
|
||||
object\. If you look at npm's package\.json \fIhttps://registry\.npmjs\.org/npm/latest\fR,
|
||||
you'll see that it has directories for doc, lib, and man\.
|
||||
.P
|
||||
In the future, this information may be used in other creative ways\.
|
||||
.SS directories\.lib
|
||||
.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\.
|
||||
.SS directories\.bin
|
||||
.P
|
||||
If you specify a \fBbin\fP directory in \fBdirectories\.bin\fP, all the files in
|
||||
that folder will be added\.
|
||||
.P
|
||||
Because of the way the \fBbin\fP directive works, specifying both a
|
||||
\fBbin\fP path and setting \fBdirectories\.bin\fP is an error\. If you want to
|
||||
specify individual files, use \fBbin\fP, and for all the files in an
|
||||
existing \fBbin\fP directory, use \fBdirectories\.bin\fP\|\.
|
||||
.SS directories\.man
|
||||
.P
|
||||
A folder that is full of man pages\. Sugar to generate a "man" array by
|
||||
walking the folder\.
|
||||
.SS directories\.doc
|
||||
.P
|
||||
Put markdown files in here\. Eventually, these will be displayed nicely,
|
||||
maybe, someday\.
|
||||
.SS directories\.example
|
||||
.P
|
||||
Put example scripts in here\. Someday, it might be exposed in some clever way\.
|
||||
.SS directories\.test
|
||||
.P
|
||||
Put your tests in here\. It is currently not exposed, but it might be in the
|
||||
future\.
|
||||
.SH repository
|
||||
.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 \fBnpm docs\fP
|
||||
command will be able to find you\.
|
||||
.P
|
||||
Do it like this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
"repository" :
|
||||
{ "type" : "git"
|
||||
, "url" : "https://github\.com/npm/npm\.git"
|
||||
}
|
||||
|
||||
"repository" :
|
||||
{ "type" : "svn"
|
||||
, "url" : "https://v8\.googlecode\.com/svn/trunk/"
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.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
|
||||
For GitHub, GitHub gist, Bitbucket, or GitLab repositories you can use the same
|
||||
shortcut syntax you use for \fBnpm install\fP:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
"repository": "npm/npm"
|
||||
|
||||
"repository": "gist:11081aaa281"
|
||||
|
||||
"repository": "bitbucket:example/repo"
|
||||
|
||||
"repository": "gitlab:another/repo"
|
||||
.fi
|
||||
.RE
|
||||
.SH scripts
|
||||
.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
|
||||
See npm help 7 \fBnpm\-scripts\fP to find out more about writing package scripts\.
|
||||
.SH config
|
||||
.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
|
||||
.RS 2
|
||||
.nf
|
||||
{ "name" : "foo"
|
||||
, "config" : { "port" : "8080" } }
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
and then had a "start" command that then referenced the
|
||||
\fBnpm_package_config_port\fP environment variable, then the user could
|
||||
override that by doing \fBnpm config set foo:port 8001\fP\|\.
|
||||
.P
|
||||
See npm help 7 \fBnpm\-config\fP and npm help 7 \fBnpm\-scripts\fP for more on package
|
||||
configs\.
|
||||
.SH dependencies
|
||||
.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
|
||||
\fBPlease do not put test harnesses or transpilers in your
|
||||
\fBdependencies\fP object\.\fR See \fBdevDependencies\fP, below\.
|
||||
.P
|
||||
See npm help 7 semver for more details about specifying version ranges\.
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
\fBversion\fP Must match \fBversion\fP exactly
|
||||
.IP \(bu 2
|
||||
\fB>version\fP Must be greater than \fBversion\fP
|
||||
.IP \(bu 2
|
||||
\fB>=version\fP etc
|
||||
.IP \(bu 2
|
||||
\fB<version\fP
|
||||
.IP \(bu 2
|
||||
\fB<=version\fP
|
||||
.IP \(bu 2
|
||||
\fB~version\fP "Approximately equivalent to version" See npm help 7 semver
|
||||
.IP \(bu 2
|
||||
\fB^version\fP "Compatible with version" See npm help 7 semver
|
||||
.IP \(bu 2
|
||||
\fB1\.2\.x\fP 1\.2\.0, 1\.2\.1, etc\., but not 1\.3\.0
|
||||
.IP \(bu 2
|
||||
\fBhttp://\.\.\.\fP See 'URLs as Dependencies' below
|
||||
.IP \(bu 2
|
||||
\fB*\fP Matches any version
|
||||
.IP \(bu 2
|
||||
\fB""\fP (just an empty string) Same as \fB*\fP
|
||||
.IP \(bu 2
|
||||
\fBversion1 \- version2\fP Same as \fB>=version1 <=version2\fP\|\.
|
||||
.IP \(bu 2
|
||||
\fBrange1 || range2\fP Passes if either range1 or range2 are satisfied\.
|
||||
.IP \(bu 2
|
||||
\fBgit\.\.\.\fP See 'Git URLs as Dependencies' below
|
||||
.IP \(bu 2
|
||||
\fBuser/repo\fP See 'GitHub URLs' below
|
||||
.IP \(bu 2
|
||||
\fBtag\fP A specific version tagged and published as \fBtag\fP See npm help \fBnpm\-tag\fP
|
||||
.IP \(bu 2
|
||||
\fBpath/path/path\fP See Local Paths \fI#local\-paths\fR below
|
||||
|
||||
.RE
|
||||
.P
|
||||
For example, these are all valid:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "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"
|
||||
}
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.SS URLs as Dependencies
|
||||
.P
|
||||
You may specify a tarball URL in place of a version range\.
|
||||
.P
|
||||
This tarball will be downloaded and installed locally to your package at
|
||||
install time\.
|
||||
.SS Git URLs as Dependencies
|
||||
.P
|
||||
Git urls can be of the form:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
git://github\.com/user/project\.git#commit\-ish
|
||||
git+ssh://user@hostname:project\.git#commit\-ish
|
||||
git+ssh://user@hostname/project\.git#commit\-ish
|
||||
git+http://user@hostname/project/blah\.git#commit\-ish
|
||||
git+https://user@hostname/project/blah\.git#commit\-ish
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
The \fBcommit\-ish\fP can be any tag, sha, or branch which can be supplied as
|
||||
an argument to \fBgit checkout\fP\|\. The default is \fBmaster\fP\|\.
|
||||
.SH GitHub URLs
|
||||
.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 \fBcommit\-ish\fP suffix can be
|
||||
included\. For example:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{
|
||||
"name": "foo",
|
||||
"version": "0\.0\.0",
|
||||
"dependencies": {
|
||||
"express": "visionmedia/express",
|
||||
"mocha": "visionmedia/mocha#4727d357ea"
|
||||
}
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.SH Local Paths
|
||||
.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 \fBnpm install \-\-save\fP, using any of
|
||||
these forms:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
\|\.\./foo/bar
|
||||
~/foo/bar
|
||||
\|\./foo/bar
|
||||
/foo/bar
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
in which case they will be normalized to a relative path and added to your
|
||||
\fBpackage\.json\fP\|\. For example:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{
|
||||
"name": "baz",
|
||||
"dependencies": {
|
||||
"bar": "file:\.\./foo/bar"
|
||||
}
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.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\.
|
||||
.SH devDependencies
|
||||
.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
|
||||
In this case, it's best to map these additional items in a \fBdevDependencies\fP
|
||||
object\.
|
||||
.P
|
||||
These things will be installed when doing \fBnpm link\fP or \fBnpm install\fP
|
||||
from the root of a package, and can be managed like any other npm
|
||||
configuration param\. See npm help 7 \fBnpm\-config\fP for more on the topic\.
|
||||
.P
|
||||
For build steps that are not platform\-specific, such as compiling
|
||||
CoffeeScript or other languages to JavaScript, use the \fBprepublish\fP
|
||||
script to do this, and make the required package a devDependency\.
|
||||
.P
|
||||
For example:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "name": "ethopia\-waza",
|
||||
"description": "a delightfully fruity coffee varietal",
|
||||
"version": "1\.2\.3",
|
||||
"devDependencies": {
|
||||
"coffee\-script": "~1\.6\.3"
|
||||
},
|
||||
"scripts": {
|
||||
"prepublish": "coffee \-o lib/ \-c src/waza\.coffee"
|
||||
},
|
||||
"main": "lib/waza\.js"
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
The \fBprepublish\fP 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 \fBnpm install\fP), it'll
|
||||
run this script as well, so that you can test it easily\.
|
||||
.SH peerDependencies
|
||||
.P
|
||||
In some cases, you want to express the compatibility of your package with a
|
||||
host tool or library, while not necessarily doing a \fBrequire\fP of this host\.
|
||||
This is usually referred to as a \fIplugin\fR\|\. Notably, your module may be exposing
|
||||
a specific interface, expected and specified by the host documentation\.
|
||||
.P
|
||||
For example:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{
|
||||
"name": "tea\-latte",
|
||||
"version": "1\.3\.5",
|
||||
"peerDependencies": {
|
||||
"tea": "2\.x"
|
||||
}
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
This ensures your package \fBtea\-latte\fP can be installed \fIalong\fR with the second
|
||||
major version of the host package \fBtea\fP only\. \fBnpm install tea\-latte\fP could
|
||||
possibly yield the following dependency graph:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
├── tea\-latte@1\.3\.5
|
||||
└── tea@2\.2\.0
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
\fBNOTE: npm versions 1 and 2 will automatically install \fBpeerDependencies\fP 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\.\fR 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
|
||||
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
|
||||
Assuming the host complies with semver \fIhttp://semver\.org/\fR, 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 \fB"^1\.0"\fP or \fB"1\.x"\fP to express
|
||||
this\. If you depend on features introduced in 1\.5\.2, use \fB">= 1\.5\.2 < 2"\fP\|\.
|
||||
.SH bundledDependencies
|
||||
.P
|
||||
This defines an array of package names that will be bundled when publishing the package\.
|
||||
.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 \fBbundledDependencies\fP array and executing \fBnpm pack\fP\|\.
|
||||
.P
|
||||
For example:
|
||||
If we define a package\.json like this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{
|
||||
"name": "awesome\-web\-framework",
|
||||
"version": "1\.0\.0",
|
||||
"bundledDependencies": [
|
||||
'renderized', 'super\-streams'
|
||||
]
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
we can obtain \fBawesome\-web\-framework\-1\.0\.0\.tgz\fP file by running \fBnpm pack\fP\|\. This file contains the dependencies \fBrenderized\fP and \fBsuper\-streams\fP which can be installed in a new project by executing \fBnpm install awesome\-web\-framework\-1\.0\.0\.tgz\fP\|\.
|
||||
.P
|
||||
If this is spelled \fB"bundleDependencies"\fP, then that is also honored\.
|
||||
.SH optionalDependencies
|
||||
.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 \fBoptionalDependencies\fP
|
||||
object\. This is a map of package name to version or url, just like the
|
||||
\fBdependencies\fP object\. The difference is that build failures do not cause
|
||||
installation to fail\.
|
||||
.P
|
||||
It is still your program's responsibility to handle the lack of the
|
||||
dependency\. For example, something like this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
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()
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Entries in \fBoptionalDependencies\fP will override entries of the same name in
|
||||
\fBdependencies\fP, so it's usually best to only put in one place\.
|
||||
.SH engines
|
||||
.P
|
||||
You can specify the version of node that your stuff works on:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "engines" : { "node" : ">=0\.10\.3 <0\.12" } }
|
||||
.fi
|
||||
.RE
|
||||
.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
|
||||
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
|
||||
You can also use the "engines" field to specify which versions of npm
|
||||
are capable of properly installing your program\. For example:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "engines" : { "npm" : "~1\.0\.20" } }
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Unless the user has set the \fBengine\-strict\fP config flag, this
|
||||
field is advisory only will produce warnings when your package is installed as a dependency\.
|
||||
.SH engineStrict
|
||||
.P
|
||||
\fBNOTE: This feature is deprecated and will be removed in npm 3\.0\.0\.\fR
|
||||
.P
|
||||
If you are sure that your module will \fIdefinitely not\fR run properly on
|
||||
versions of Node/npm other than those specified in the \fBengines\fP object,
|
||||
then you can set \fB"engineStrict": true\fP in your package\.json file\.
|
||||
This will override the user's \fBengine\-strict\fP config setting\.
|
||||
.P
|
||||
Please do not do this unless you are really very very sure\. If your
|
||||
engines object is something overly restrictive, you can quite easily and
|
||||
inadvertently lock yourself into obscurity and prevent your users from
|
||||
updating to new versions of Node\. Consider this choice carefully\.
|
||||
.SH os
|
||||
.P
|
||||
You can specify which operating systems your
|
||||
module will run on:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
"os" : [ "darwin", "linux" ]
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
You can also blacklist instead of whitelist operating systems,
|
||||
just prepend the blacklisted os with a '!':
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
"os" : [ "!win32" ]
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
The host operating system is determined by \fBprocess\.platform\fP
|
||||
.P
|
||||
It is allowed to both blacklist, and whitelist, although there isn't any
|
||||
good reason to do this\.
|
||||
.SH cpu
|
||||
.P
|
||||
If your code only runs on certain cpu architectures,
|
||||
you can specify which ones\.
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
"cpu" : [ "x64", "ia32" ]
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Like the \fBos\fP option, you can also blacklist architectures:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
"cpu" : [ "!arm", "!mips" ]
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
The host architecture is determined by \fBprocess\.arch\fP
|
||||
.SH preferGlobal
|
||||
.P
|
||||
If your package is primarily a command\-line application that should be
|
||||
installed globally, then set this value to \fBtrue\fP to provide a warning
|
||||
if it is installed locally\.
|
||||
.P
|
||||
It doesn't actually prevent users from installing it locally, but it
|
||||
does help prevent some confusion if it doesn't work as expected\.
|
||||
.SH private
|
||||
.P
|
||||
If you set \fB"private": true\fP in your package\.json, then npm will refuse
|
||||
to publish it\.
|
||||
.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
|
||||
\fBpublishConfig\fP dictionary described below to override the \fBregistry\fP config
|
||||
param at publish\-time\.
|
||||
.SH publishConfig
|
||||
.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
|
||||
Any config values can be overridden, but of course only "tag", "registry" and
|
||||
"access" probably matter for the purposes of publishing\.
|
||||
.P
|
||||
See npm help 7 \fBnpm\-config\fP to see the list of config options that can be
|
||||
overridden\.
|
||||
.SH DEFAULT VALUES
|
||||
.P
|
||||
npm will default some values based on package contents\.
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
\fB"scripts": {"start": "node server\.js"}\fP
|
||||
If there is a \fBserver\.js\fP file in the root of your package, then npm
|
||||
will default the \fBstart\fP command to \fBnode server\.js\fP\|\.
|
||||
.IP \(bu 2
|
||||
\fB"scripts":{"install": "node\-gyp rebuild"}\fP
|
||||
If there is a \fBbinding\.gyp\fP file in the root of your package and you have not defined an \fBinstall\fP or \fBpreinstall\fP script, npm will
|
||||
default the \fBinstall\fP command to compile using node\-gyp\.
|
||||
.IP \(bu 2
|
||||
\fB"contributors": [\.\.\.]\fP
|
||||
If there is an \fBAUTHORS\fP file in the root of your package, npm will
|
||||
treat each line as a \fBName <email> (url)\fP format, where email and url
|
||||
are optional\. Lines which start with a \fB#\fP or are blank, will be
|
||||
ignored\.
|
||||
|
||||
.RE
|
||||
.SH SEE ALSO
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
npm help 7 semver
|
||||
.IP \(bu 2
|
||||
npm help init
|
||||
.IP \(bu 2
|
||||
npm help version
|
||||
.IP \(bu 2
|
||||
npm help config
|
||||
.IP \(bu 2
|
||||
npm help 7 config
|
||||
.IP \(bu 2
|
||||
npm help help
|
||||
.IP \(bu 2
|
||||
npm help 7 faq
|
||||
.IP \(bu 2
|
||||
npm help install
|
||||
.IP \(bu 2
|
||||
npm help publish
|
||||
.IP \(bu 2
|
||||
npm help uninstall
|
||||
|
||||
.RE
|
||||
|
114
node_modules/npm/man/man5/npmrc.5
generated
vendored
Normal file
114
node_modules/npm/man/man5/npmrc.5
generated
vendored
Normal file
@@ -0,0 +1,114 @@
|
||||
.TH "NPMRC" "5" "March 2017" "" ""
|
||||
.SH "NAME"
|
||||
\fBnpmrc\fR \- The npm config files
|
||||
.SH DESCRIPTION
|
||||
.P
|
||||
npm gets its config settings from the command line, environment
|
||||
variables, and \fBnpmrc\fP files\.
|
||||
.P
|
||||
The \fBnpm config\fP command can be used to update and edit the contents
|
||||
of the user and global npmrc files\.
|
||||
.P
|
||||
For a list of available configuration options, see npm help 7 config\.
|
||||
.SH FILES
|
||||
.P
|
||||
The four relevant files are:
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
per\-project config file (/path/to/my/project/\.npmrc)
|
||||
.IP \(bu 2
|
||||
per\-user config file (~/\.npmrc)
|
||||
.IP \(bu 2
|
||||
global config file ($PREFIX/etc/npmrc)
|
||||
.IP \(bu 2
|
||||
npm builtin config file (/path/to/npm/npmrc)
|
||||
|
||||
.RE
|
||||
.P
|
||||
All npm config files are an ini\-formatted list of \fBkey = value\fP
|
||||
parameters\. Environment variables can be replaced using
|
||||
\fB${VARIABLE_NAME}\fP\|\. For example:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
prefix = ${HOME}/\.npm\-packages
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Each of these files is loaded, and config options are resolved in
|
||||
priority order\. For example, a setting in the userconfig file would
|
||||
override the setting in the globalconfig file\.
|
||||
.P
|
||||
Array values are specified by adding "[]" after the key name\. For
|
||||
example:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
key[] = "first value"
|
||||
key[] = "second value"
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
\fBNOTE:\fR Because local (per\-project or per\-user) \fB\|\.npmrc\fP files can contain
|
||||
sensitive credentials, they must be readable and writable \fIonly\fR by your user
|
||||
account (i\.e\. must have a mode of \fB0600\fP), otherwise they \fIwill be ignored by
|
||||
npm!\fR
|
||||
.SS Comments
|
||||
.P
|
||||
Lines in \fB\|\.npmrc\fP files are interpreted as comments when they begin with a \fB;\fP or \fB#\fP character\. \fB\|\.npmrc\fP files are parsed by npm/ini \fIhttps://github\.com/npm/ini\fR, which specifies this comment syntax\.
|
||||
.P
|
||||
For example:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
# last modified: 01 Jan 2016
|
||||
; Set a new registry for a scoped package
|
||||
@myscope:registry=https://mycustomregistry\.example\.org
|
||||
.fi
|
||||
.RE
|
||||
.SS Per\-project config file
|
||||
.P
|
||||
When working locally in a project, a \fB\|\.npmrc\fP file in the root of the
|
||||
project (ie, a sibling of \fBnode_modules\fP and \fBpackage\.json\fP) will set
|
||||
config values specific to this project\.
|
||||
.P
|
||||
Note that this only applies to the root of the project that you're
|
||||
running npm in\. It has no effect when your module is published\. For
|
||||
example, you can't publish a module that forces itself to install
|
||||
globally, or in a different location\.
|
||||
.P
|
||||
Additionally, this file is not read in global mode, such as when running
|
||||
\fBnpm install \-g\fP\|\.
|
||||
.SS Per\-user config file
|
||||
.P
|
||||
\fB$HOME/\.npmrc\fP (or the \fBuserconfig\fP param, if set in the environment
|
||||
or on the command line)
|
||||
.SS Global config file
|
||||
.P
|
||||
\fB$PREFIX/etc/npmrc\fP (or the \fBglobalconfig\fP param, if set above):
|
||||
This file is an ini\-file formatted list of \fBkey = value\fP parameters\.
|
||||
Environment variables can be replaced as above\.
|
||||
.SS Built\-in config file
|
||||
.P
|
||||
\fBpath/to/npm/itself/npmrc\fP
|
||||
.P
|
||||
This is an unchangeable "builtin" configuration file that npm keeps
|
||||
consistent across updates\. Set fields in here using the \fB\|\./configure\fP
|
||||
script that comes with npm\. This is primarily for distribution
|
||||
maintainers to override default configs in a standard and consistent
|
||||
manner\.
|
||||
.SH SEE ALSO
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
npm help 5 folders
|
||||
.IP \(bu 2
|
||||
npm help config
|
||||
.IP \(bu 2
|
||||
npm help 7 config
|
||||
.IP \(bu 2
|
||||
npm help 5 package\.json
|
||||
.IP \(bu 2
|
||||
npm help npm
|
||||
|
||||
.RE
|
||||
|
923
node_modules/npm/man/man5/package.json.5
generated
vendored
Normal file
923
node_modules/npm/man/man5/package.json.5
generated
vendored
Normal file
@@ -0,0 +1,923 @@
|
||||
.TH "PACKAGE\.JSON" "5" "March 2017" "" ""
|
||||
.SH "NAME"
|
||||
\fBpackage.json\fR \- Specifics of npm's package\.json handling
|
||||
.SH DESCRIPTION
|
||||
.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
|
||||
A lot of the behavior described in this document is affected by the config
|
||||
settings described in npm help 7 \fBnpm\-config\fP\|\.
|
||||
.SH name
|
||||
.P
|
||||
The \fImost\fR important things in your package\.json are the name and version fields\.
|
||||
Those are actually required, and your package won't install without
|
||||
them\. 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\.
|
||||
.P
|
||||
The name is what your thing is called\.
|
||||
.P
|
||||
Some rules:
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
The name must be less than or equal to 214 characters\. This includes the scope for
|
||||
scoped packages\.
|
||||
.IP \(bu 2
|
||||
The name can't start with a dot or an underscore\.
|
||||
.IP \(bu 2
|
||||
New packages must not have uppercase letters in the name\.
|
||||
.IP \(bu 2
|
||||
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\.
|
||||
|
||||
.RE
|
||||
.P
|
||||
Some tips:
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
Don't use the same name as a core Node module\.
|
||||
.IP \(bu 2
|
||||
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\.)
|
||||
.IP \(bu 2
|
||||
The name will probably be passed as an argument to require(), so it should
|
||||
be something short, but also reasonably descriptive\.
|
||||
.IP \(bu 2
|
||||
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\. https://www\.npmjs\.com/
|
||||
|
||||
.RE
|
||||
.P
|
||||
A name can be optionally prefixed by a scope, e\.g\. \fB@myorg/mypackage\fP\|\. See
|
||||
npm help 7 \fBnpm\-scope\fP for more detail\.
|
||||
.SH version
|
||||
.P
|
||||
The \fImost\fR important things in your package\.json are the name and version fields\.
|
||||
Those are actually required, and your package won't install without
|
||||
them\. 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\.
|
||||
.P
|
||||
Version must be parseable by
|
||||
node\-semver \fIhttps://github\.com/isaacs/node\-semver\fR, which is bundled
|
||||
with npm as a dependency\. (\fBnpm install semver\fP to use it yourself\.)
|
||||
.P
|
||||
More on version numbers and ranges at npm help 7 semver\.
|
||||
.SH description
|
||||
.P
|
||||
Put a description in it\. It's a string\. This helps people discover your
|
||||
package, as it's listed in \fBnpm search\fP\|\.
|
||||
.SH keywords
|
||||
.P
|
||||
Put keywords in it\. It's an array of strings\. This helps people
|
||||
discover your package as it's listed in \fBnpm search\fP\|\.
|
||||
.SH homepage
|
||||
.P
|
||||
The url to the project homepage\.
|
||||
.P
|
||||
\fBNOTE\fR: This is \fInot\fR the same as "url"\. If you put a "url" field,
|
||||
then the registry will think it's a redirection to your package that has
|
||||
been published somewhere else, and spit at you\.
|
||||
.P
|
||||
Literally\. Spit\. I'm so not kidding\.
|
||||
.SH bugs
|
||||
.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
|
||||
It should look like this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "url" : "https://github\.com/owner/project/issues"
|
||||
, "email" : "project@hostname\.com"
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.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
|
||||
If a url is provided, it will be used by the \fBnpm bugs\fP command\.
|
||||
.SH license
|
||||
.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
|
||||
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
|
||||
.RS 2
|
||||
.nf
|
||||
{ "license" : "BSD\-3\-Clause" }
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
You can check the full list of SPDX license IDs \fIhttps://spdx\.org/licenses/\fR\|\.
|
||||
Ideally you should pick one that is
|
||||
OSI \fIhttps://opensource\.org/licenses/alphabetical\fR approved\.
|
||||
.P
|
||||
If your package is licensed under multiple common licenses, use an SPDX license
|
||||
expression syntax version 2\.0 string \fIhttps://npmjs\.com/package/spdx\fR, like this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "license" : "(ISC OR GPL\-3\.0)" }
|
||||
.fi
|
||||
.RE
|
||||
.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
|
||||
.RS 2
|
||||
.nf
|
||||
{ "license" : "SEE LICENSE IN <filename>" }
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Then include a file named \fB<filename>\fP at the top level of the package\.
|
||||
.P
|
||||
Some old packages used license objects or a "licenses" property containing an
|
||||
array of license objects:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
// Not valid metadata
|
||||
{ "license" :
|
||||
{ "type" : "ISC"
|
||||
, "url" : "http://opensource\.org/licenses/ISC"
|
||||
}
|
||||
}
|
||||
|
||||
// Not valid metadata
|
||||
{ "licenses" :
|
||||
[
|
||||
{ "type": "MIT"
|
||||
, "url": "http://www\.opensource\.org/licenses/mit\-license\.php"
|
||||
}
|
||||
, { "type": "Apache\-2\.0"
|
||||
, "url": "http://opensource\.org/licenses/apache2\.0\.php"
|
||||
}
|
||||
]
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Those styles are now deprecated\. Instead, use SPDX expressions, like this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "license": "ISC" }
|
||||
|
||||
{ "license": "(MIT OR Apache\-2\.0)" }
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Finally, if you do not wish to grant others the right to use a private or
|
||||
unpublished package under any terms:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "license": "UNLICENSED"}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Consider also setting \fB"private": true\fP to prevent accidental publication\.
|
||||
.SH people fields: author, contributors
|
||||
.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
|
||||
.RS 2
|
||||
.nf
|
||||
{ "name" : "Barney Rubble"
|
||||
, "email" : "b@rubble\.com"
|
||||
, "url" : "http://barnyrubble\.tumblr\.com/"
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Or you can shorten that all into a single string, and npm will parse it for you:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
"Barney Rubble <b@rubble\.com> (http://barnyrubble\.tumblr\.com/)"
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Both email and url are optional either way\.
|
||||
.P
|
||||
npm also sets a top\-level "maintainers" field with your npm user info\.
|
||||
.SH files
|
||||
.P
|
||||
The "files" field is an array of files to include in your project\. If
|
||||
you name a folder in the array, then it will also include the files
|
||||
inside that folder\. (Unless they would be ignored by another rule\.)
|
||||
.P
|
||||
You can also provide a "\.npmignore" file in the root of your package or
|
||||
in subdirectories, which will keep files from being included, even
|
||||
if they would be picked up by the files array\. The \fB\|\.npmignore\fP file
|
||||
works just like a \fB\|\.gitignore\fP\|\.
|
||||
.P
|
||||
Certain files are always included, regardless of settings:
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
\fBpackage\.json\fP
|
||||
.IP \(bu 2
|
||||
\fBREADME\fP
|
||||
.IP \(bu 2
|
||||
\fBCHANGES\fP / \fBCHANGELOG\fP / \fBHISTORY\fP (any casing and file extension)
|
||||
.IP \(bu 2
|
||||
\fBLICENSE\fP / \fBLICENCE\fP
|
||||
.IP \(bu 2
|
||||
The file in the "main" field
|
||||
|
||||
.RE
|
||||
.P
|
||||
Conversely, some files are always ignored:
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
\fB\|\.git\fP
|
||||
.IP \(bu 2
|
||||
\fBCVS\fP
|
||||
.IP \(bu 2
|
||||
\fB\|\.svn\fP
|
||||
.IP \(bu 2
|
||||
\fB\|\.hg\fP
|
||||
.IP \(bu 2
|
||||
\fB\|\.lock\-wscript\fP
|
||||
.IP \(bu 2
|
||||
\fB\|\.wafpickle\-N\fP
|
||||
.IP \(bu 2
|
||||
\fB\|\.*\.swp\fP
|
||||
.IP \(bu 2
|
||||
\fB\|\.DS_Store\fP
|
||||
.IP \(bu 2
|
||||
\fB\|\._*\fP
|
||||
.IP \(bu 2
|
||||
\fBnpm\-debug\.log\fP
|
||||
.IP \(bu 2
|
||||
\fB\|\.npmrc\fP
|
||||
.IP \(bu 2
|
||||
\fBnode_modules\fP
|
||||
|
||||
.RE
|
||||
.SH main
|
||||
.P
|
||||
The main field is a module ID that is the primary entry point to your program\.
|
||||
That is, if your package is named \fBfoo\fP, and a user installs it, and then does
|
||||
\fBrequire("foo")\fP, then your main module's exports object will be returned\.
|
||||
.P
|
||||
This should be a module ID relative to the root of your package folder\.
|
||||
.P
|
||||
For most modules, it makes the most sense to have a main script and often not
|
||||
much else\.
|
||||
.SH bin
|
||||
.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
|
||||
To use this, supply a \fBbin\fP field in your package\.json which is a map of
|
||||
command name to local file name\. On install, npm will symlink that file into
|
||||
\fBprefix/bin\fP for global installs, or \fB\|\./node_modules/\.bin/\fP for local
|
||||
installs\.
|
||||
.P
|
||||
For example, myapp could have this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "bin" : { "myapp" : "\./cli\.js" } }
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
So, when you install myapp, it'll create a symlink from the \fBcli\.js\fP script to
|
||||
\fB/usr/local/bin/myapp\fP\|\.
|
||||
.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
|
||||
.RS 2
|
||||
.nf
|
||||
{ "name": "my\-program"
|
||||
, "version": "1\.2\.5"
|
||||
, "bin": "\./path/to/program" }
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
would be the same as this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "name": "my\-program"
|
||||
, "version": "1\.2\.5"
|
||||
, "bin" : { "my\-program" : "\./path/to/program" } }
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Please make sure that your file(s) referenced in \fBbin\fP starts with
|
||||
\fB#!/usr/bin/env node\fP, otherwise the scripts are started without the node
|
||||
executable!
|
||||
.SH man
|
||||
.P
|
||||
Specify either a single file or an array of filenames to put in place for the
|
||||
\fBman\fP program to find\.
|
||||
.P
|
||||
If only a single file is provided, then it's installed such that it is the
|
||||
result from \fBman <pkgname>\fP, regardless of its actual filename\. For example:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "name" : "foo"
|
||||
, "version" : "1\.2\.3"
|
||||
, "description" : "A packaged foo fooer for fooing foos"
|
||||
, "main" : "foo\.js"
|
||||
, "man" : "\./man/doc\.1"
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
would link the \fB\|\./man/doc\.1\fP file in such that it is the target for \fBman foo\fP
|
||||
.P
|
||||
If the filename doesn't start with the package name, then it's prefixed\.
|
||||
So, this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "name" : "foo"
|
||||
, "version" : "1\.2\.3"
|
||||
, "description" : "A packaged foo fooer for fooing foos"
|
||||
, "main" : "foo\.js"
|
||||
, "man" : [ "\./man/foo\.1", "\./man/bar\.1" ]
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
will create files to do \fBman foo\fP and \fBman foo\-bar\fP\|\.
|
||||
.P
|
||||
Man files must end with a number, and optionally a \fB\|\.gz\fP suffix if they are
|
||||
compressed\. The number dictates which man section the file is installed into\.
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "name" : "foo"
|
||||
, "version" : "1\.2\.3"
|
||||
, "description" : "A packaged foo fooer for fooing foos"
|
||||
, "main" : "foo\.js"
|
||||
, "man" : [ "\./man/foo\.1", "\./man/foo\.2" ]
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
will create entries for \fBman foo\fP and \fBman 2 foo\fP
|
||||
.SH directories
|
||||
.P
|
||||
The CommonJS Packages \fIhttp://wiki\.commonjs\.org/wiki/Packages/1\.0\fR spec details a
|
||||
few ways that you can indicate the structure of your package using a \fBdirectories\fP
|
||||
object\. If you look at npm's package\.json \fIhttps://registry\.npmjs\.org/npm/latest\fR,
|
||||
you'll see that it has directories for doc, lib, and man\.
|
||||
.P
|
||||
In the future, this information may be used in other creative ways\.
|
||||
.SS directories\.lib
|
||||
.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\.
|
||||
.SS directories\.bin
|
||||
.P
|
||||
If you specify a \fBbin\fP directory in \fBdirectories\.bin\fP, all the files in
|
||||
that folder will be added\.
|
||||
.P
|
||||
Because of the way the \fBbin\fP directive works, specifying both a
|
||||
\fBbin\fP path and setting \fBdirectories\.bin\fP is an error\. If you want to
|
||||
specify individual files, use \fBbin\fP, and for all the files in an
|
||||
existing \fBbin\fP directory, use \fBdirectories\.bin\fP\|\.
|
||||
.SS directories\.man
|
||||
.P
|
||||
A folder that is full of man pages\. Sugar to generate a "man" array by
|
||||
walking the folder\.
|
||||
.SS directories\.doc
|
||||
.P
|
||||
Put markdown files in here\. Eventually, these will be displayed nicely,
|
||||
maybe, someday\.
|
||||
.SS directories\.example
|
||||
.P
|
||||
Put example scripts in here\. Someday, it might be exposed in some clever way\.
|
||||
.SS directories\.test
|
||||
.P
|
||||
Put your tests in here\. It is currently not exposed, but it might be in the
|
||||
future\.
|
||||
.SH repository
|
||||
.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 \fBnpm docs\fP
|
||||
command will be able to find you\.
|
||||
.P
|
||||
Do it like this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
"repository" :
|
||||
{ "type" : "git"
|
||||
, "url" : "https://github\.com/npm/npm\.git"
|
||||
}
|
||||
|
||||
"repository" :
|
||||
{ "type" : "svn"
|
||||
, "url" : "https://v8\.googlecode\.com/svn/trunk/"
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.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
|
||||
For GitHub, GitHub gist, Bitbucket, or GitLab repositories you can use the same
|
||||
shortcut syntax you use for \fBnpm install\fP:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
"repository": "npm/npm"
|
||||
|
||||
"repository": "gist:11081aaa281"
|
||||
|
||||
"repository": "bitbucket:example/repo"
|
||||
|
||||
"repository": "gitlab:another/repo"
|
||||
.fi
|
||||
.RE
|
||||
.SH scripts
|
||||
.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
|
||||
See npm help 7 \fBnpm\-scripts\fP to find out more about writing package scripts\.
|
||||
.SH config
|
||||
.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
|
||||
.RS 2
|
||||
.nf
|
||||
{ "name" : "foo"
|
||||
, "config" : { "port" : "8080" } }
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
and then had a "start" command that then referenced the
|
||||
\fBnpm_package_config_port\fP environment variable, then the user could
|
||||
override that by doing \fBnpm config set foo:port 8001\fP\|\.
|
||||
.P
|
||||
See npm help 7 \fBnpm\-config\fP and npm help 7 \fBnpm\-scripts\fP for more on package
|
||||
configs\.
|
||||
.SH dependencies
|
||||
.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
|
||||
\fBPlease do not put test harnesses or transpilers in your
|
||||
\fBdependencies\fP object\.\fR See \fBdevDependencies\fP, below\.
|
||||
.P
|
||||
See npm help 7 semver for more details about specifying version ranges\.
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
\fBversion\fP Must match \fBversion\fP exactly
|
||||
.IP \(bu 2
|
||||
\fB>version\fP Must be greater than \fBversion\fP
|
||||
.IP \(bu 2
|
||||
\fB>=version\fP etc
|
||||
.IP \(bu 2
|
||||
\fB<version\fP
|
||||
.IP \(bu 2
|
||||
\fB<=version\fP
|
||||
.IP \(bu 2
|
||||
\fB~version\fP "Approximately equivalent to version" See npm help 7 semver
|
||||
.IP \(bu 2
|
||||
\fB^version\fP "Compatible with version" See npm help 7 semver
|
||||
.IP \(bu 2
|
||||
\fB1\.2\.x\fP 1\.2\.0, 1\.2\.1, etc\., but not 1\.3\.0
|
||||
.IP \(bu 2
|
||||
\fBhttp://\.\.\.\fP See 'URLs as Dependencies' below
|
||||
.IP \(bu 2
|
||||
\fB*\fP Matches any version
|
||||
.IP \(bu 2
|
||||
\fB""\fP (just an empty string) Same as \fB*\fP
|
||||
.IP \(bu 2
|
||||
\fBversion1 \- version2\fP Same as \fB>=version1 <=version2\fP\|\.
|
||||
.IP \(bu 2
|
||||
\fBrange1 || range2\fP Passes if either range1 or range2 are satisfied\.
|
||||
.IP \(bu 2
|
||||
\fBgit\.\.\.\fP See 'Git URLs as Dependencies' below
|
||||
.IP \(bu 2
|
||||
\fBuser/repo\fP See 'GitHub URLs' below
|
||||
.IP \(bu 2
|
||||
\fBtag\fP A specific version tagged and published as \fBtag\fP See npm help \fBnpm\-tag\fP
|
||||
.IP \(bu 2
|
||||
\fBpath/path/path\fP See Local Paths \fI#local\-paths\fR below
|
||||
|
||||
.RE
|
||||
.P
|
||||
For example, these are all valid:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "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"
|
||||
}
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.SS URLs as Dependencies
|
||||
.P
|
||||
You may specify a tarball URL in place of a version range\.
|
||||
.P
|
||||
This tarball will be downloaded and installed locally to your package at
|
||||
install time\.
|
||||
.SS Git URLs as Dependencies
|
||||
.P
|
||||
Git urls can be of the form:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
git://github\.com/user/project\.git#commit\-ish
|
||||
git+ssh://user@hostname:project\.git#commit\-ish
|
||||
git+ssh://user@hostname/project\.git#commit\-ish
|
||||
git+http://user@hostname/project/blah\.git#commit\-ish
|
||||
git+https://user@hostname/project/blah\.git#commit\-ish
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
The \fBcommit\-ish\fP can be any tag, sha, or branch which can be supplied as
|
||||
an argument to \fBgit checkout\fP\|\. The default is \fBmaster\fP\|\.
|
||||
.SH GitHub URLs
|
||||
.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 \fBcommit\-ish\fP suffix can be
|
||||
included\. For example:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{
|
||||
"name": "foo",
|
||||
"version": "0\.0\.0",
|
||||
"dependencies": {
|
||||
"express": "visionmedia/express",
|
||||
"mocha": "visionmedia/mocha#4727d357ea"
|
||||
}
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.SH Local Paths
|
||||
.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 \fBnpm install \-\-save\fP, using any of
|
||||
these forms:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
\|\.\./foo/bar
|
||||
~/foo/bar
|
||||
\|\./foo/bar
|
||||
/foo/bar
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
in which case they will be normalized to a relative path and added to your
|
||||
\fBpackage\.json\fP\|\. For example:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{
|
||||
"name": "baz",
|
||||
"dependencies": {
|
||||
"bar": "file:\.\./foo/bar"
|
||||
}
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.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\.
|
||||
.SH devDependencies
|
||||
.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
|
||||
In this case, it's best to map these additional items in a \fBdevDependencies\fP
|
||||
object\.
|
||||
.P
|
||||
These things will be installed when doing \fBnpm link\fP or \fBnpm install\fP
|
||||
from the root of a package, and can be managed like any other npm
|
||||
configuration param\. See npm help 7 \fBnpm\-config\fP for more on the topic\.
|
||||
.P
|
||||
For build steps that are not platform\-specific, such as compiling
|
||||
CoffeeScript or other languages to JavaScript, use the \fBprepublish\fP
|
||||
script to do this, and make the required package a devDependency\.
|
||||
.P
|
||||
For example:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "name": "ethopia\-waza",
|
||||
"description": "a delightfully fruity coffee varietal",
|
||||
"version": "1\.2\.3",
|
||||
"devDependencies": {
|
||||
"coffee\-script": "~1\.6\.3"
|
||||
},
|
||||
"scripts": {
|
||||
"prepublish": "coffee \-o lib/ \-c src/waza\.coffee"
|
||||
},
|
||||
"main": "lib/waza\.js"
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
The \fBprepublish\fP 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 \fBnpm install\fP), it'll
|
||||
run this script as well, so that you can test it easily\.
|
||||
.SH peerDependencies
|
||||
.P
|
||||
In some cases, you want to express the compatibility of your package with a
|
||||
host tool or library, while not necessarily doing a \fBrequire\fP of this host\.
|
||||
This is usually referred to as a \fIplugin\fR\|\. Notably, your module may be exposing
|
||||
a specific interface, expected and specified by the host documentation\.
|
||||
.P
|
||||
For example:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{
|
||||
"name": "tea\-latte",
|
||||
"version": "1\.3\.5",
|
||||
"peerDependencies": {
|
||||
"tea": "2\.x"
|
||||
}
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
This ensures your package \fBtea\-latte\fP can be installed \fIalong\fR with the second
|
||||
major version of the host package \fBtea\fP only\. \fBnpm install tea\-latte\fP could
|
||||
possibly yield the following dependency graph:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
├── tea\-latte@1\.3\.5
|
||||
└── tea@2\.2\.0
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
\fBNOTE: npm versions 1 and 2 will automatically install \fBpeerDependencies\fP 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\.\fR 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
|
||||
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
|
||||
Assuming the host complies with semver \fIhttp://semver\.org/\fR, 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 \fB"^1\.0"\fP or \fB"1\.x"\fP to express
|
||||
this\. If you depend on features introduced in 1\.5\.2, use \fB">= 1\.5\.2 < 2"\fP\|\.
|
||||
.SH bundledDependencies
|
||||
.P
|
||||
This defines an array of package names that will be bundled when publishing the package\.
|
||||
.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 \fBbundledDependencies\fP array and executing \fBnpm pack\fP\|\.
|
||||
.P
|
||||
For example:
|
||||
If we define a package\.json like this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{
|
||||
"name": "awesome\-web\-framework",
|
||||
"version": "1\.0\.0",
|
||||
"bundledDependencies": [
|
||||
'renderized', 'super\-streams'
|
||||
]
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
we can obtain \fBawesome\-web\-framework\-1\.0\.0\.tgz\fP file by running \fBnpm pack\fP\|\. This file contains the dependencies \fBrenderized\fP and \fBsuper\-streams\fP which can be installed in a new project by executing \fBnpm install awesome\-web\-framework\-1\.0\.0\.tgz\fP\|\.
|
||||
.P
|
||||
If this is spelled \fB"bundleDependencies"\fP, then that is also honored\.
|
||||
.SH optionalDependencies
|
||||
.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 \fBoptionalDependencies\fP
|
||||
object\. This is a map of package name to version or url, just like the
|
||||
\fBdependencies\fP object\. The difference is that build failures do not cause
|
||||
installation to fail\.
|
||||
.P
|
||||
It is still your program's responsibility to handle the lack of the
|
||||
dependency\. For example, something like this:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
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()
|
||||
}
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Entries in \fBoptionalDependencies\fP will override entries of the same name in
|
||||
\fBdependencies\fP, so it's usually best to only put in one place\.
|
||||
.SH engines
|
||||
.P
|
||||
You can specify the version of node that your stuff works on:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "engines" : { "node" : ">=0\.10\.3 <0\.12" } }
|
||||
.fi
|
||||
.RE
|
||||
.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
|
||||
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
|
||||
You can also use the "engines" field to specify which versions of npm
|
||||
are capable of properly installing your program\. For example:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
{ "engines" : { "npm" : "~1\.0\.20" } }
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Unless the user has set the \fBengine\-strict\fP config flag, this
|
||||
field is advisory only will produce warnings when your package is installed as a dependency\.
|
||||
.SH engineStrict
|
||||
.P
|
||||
\fBNOTE: This feature is deprecated and will be removed in npm 3\.0\.0\.\fR
|
||||
.P
|
||||
If you are sure that your module will \fIdefinitely not\fR run properly on
|
||||
versions of Node/npm other than those specified in the \fBengines\fP object,
|
||||
then you can set \fB"engineStrict": true\fP in your package\.json file\.
|
||||
This will override the user's \fBengine\-strict\fP config setting\.
|
||||
.P
|
||||
Please do not do this unless you are really very very sure\. If your
|
||||
engines object is something overly restrictive, you can quite easily and
|
||||
inadvertently lock yourself into obscurity and prevent your users from
|
||||
updating to new versions of Node\. Consider this choice carefully\.
|
||||
.SH os
|
||||
.P
|
||||
You can specify which operating systems your
|
||||
module will run on:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
"os" : [ "darwin", "linux" ]
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
You can also blacklist instead of whitelist operating systems,
|
||||
just prepend the blacklisted os with a '!':
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
"os" : [ "!win32" ]
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
The host operating system is determined by \fBprocess\.platform\fP
|
||||
.P
|
||||
It is allowed to both blacklist, and whitelist, although there isn't any
|
||||
good reason to do this\.
|
||||
.SH cpu
|
||||
.P
|
||||
If your code only runs on certain cpu architectures,
|
||||
you can specify which ones\.
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
"cpu" : [ "x64", "ia32" ]
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
Like the \fBos\fP option, you can also blacklist architectures:
|
||||
.P
|
||||
.RS 2
|
||||
.nf
|
||||
"cpu" : [ "!arm", "!mips" ]
|
||||
.fi
|
||||
.RE
|
||||
.P
|
||||
The host architecture is determined by \fBprocess\.arch\fP
|
||||
.SH preferGlobal
|
||||
.P
|
||||
If your package is primarily a command\-line application that should be
|
||||
installed globally, then set this value to \fBtrue\fP to provide a warning
|
||||
if it is installed locally\.
|
||||
.P
|
||||
It doesn't actually prevent users from installing it locally, but it
|
||||
does help prevent some confusion if it doesn't work as expected\.
|
||||
.SH private
|
||||
.P
|
||||
If you set \fB"private": true\fP in your package\.json, then npm will refuse
|
||||
to publish it\.
|
||||
.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
|
||||
\fBpublishConfig\fP dictionary described below to override the \fBregistry\fP config
|
||||
param at publish\-time\.
|
||||
.SH publishConfig
|
||||
.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
|
||||
Any config values can be overridden, but of course only "tag", "registry" and
|
||||
"access" probably matter for the purposes of publishing\.
|
||||
.P
|
||||
See npm help 7 \fBnpm\-config\fP to see the list of config options that can be
|
||||
overridden\.
|
||||
.SH DEFAULT VALUES
|
||||
.P
|
||||
npm will default some values based on package contents\.
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
\fB"scripts": {"start": "node server\.js"}\fP
|
||||
If there is a \fBserver\.js\fP file in the root of your package, then npm
|
||||
will default the \fBstart\fP command to \fBnode server\.js\fP\|\.
|
||||
.IP \(bu 2
|
||||
\fB"scripts":{"install": "node\-gyp rebuild"}\fP
|
||||
If there is a \fBbinding\.gyp\fP file in the root of your package and you have not defined an \fBinstall\fP or \fBpreinstall\fP script, npm will
|
||||
default the \fBinstall\fP command to compile using node\-gyp\.
|
||||
.IP \(bu 2
|
||||
\fB"contributors": [\.\.\.]\fP
|
||||
If there is an \fBAUTHORS\fP file in the root of your package, npm will
|
||||
treat each line as a \fBName <email> (url)\fP format, where email and url
|
||||
are optional\. Lines which start with a \fB#\fP or are blank, will be
|
||||
ignored\.
|
||||
|
||||
.RE
|
||||
.SH SEE ALSO
|
||||
.RS 0
|
||||
.IP \(bu 2
|
||||
npm help 7 semver
|
||||
.IP \(bu 2
|
||||
npm help init
|
||||
.IP \(bu 2
|
||||
npm help version
|
||||
.IP \(bu 2
|
||||
npm help config
|
||||
.IP \(bu 2
|
||||
npm help 7 config
|
||||
.IP \(bu 2
|
||||
npm help help
|
||||
.IP \(bu 2
|
||||
npm help 7 faq
|
||||
.IP \(bu 2
|
||||
npm help install
|
||||
.IP \(bu 2
|
||||
npm help publish
|
||||
.IP \(bu 2
|
||||
npm help uninstall
|
||||
|
||||
.RE
|
||||
|
Reference in New Issue
Block a user