npm 开发者指南
介绍
因此,你已经决定使用 npm 来开发(并且可能发布/部署)你的项目。 这是很好的一件事! 除了用户安装程序所需要执行的简单步骤之外,你可能还需要执行另外的一些操作。
关于文件
这些是手册页。
如果你已经安装了 npm,那么我相信你应该能够通过npm thing
获取特定主题的文档,或者使用npm help thing
查看相同的信息。
什么是包(package)?
包是:
- 包含有
package.json
文件描述的程序的文件夹。 - 包含有(1)的
gzip
压缩包。 - 解析为(2)的网址。
- <name>@<version>与(3)在注册表上发布的(1)。
- (1)<name>@<tag>指向(4).
- <name>具有满足(5)的 “最新” 标签的1.
- 一个 git Url,克隆时,结果为(1)。
即使你从没有发布过你的包,如果你只是想要写一个 node 程序(1),你仍然可以得到使用 npm 的很多好处,或者如果你还希望打包后能够轻松地安装到其他地方成一个 tarball(2)。
Git 网址可以采用以下的形式:
git://github.com/user/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
commit-ish 可以是任何的标签,sha,或者分支,作为参数被提供给 git checkout。默认值是 master。
package.json 文件
你需要 package.json 在项目的根目录中有一个文件才能使用 npm 执行任何操作。这基本上就是整个界面。
有关于 package.json 这个文件中内容,你还需要:
- 名称:这应该是标识您的项目的字符串。请不要使用名称来指定它在节点上运行,还是在 JavaScript 中。您可以使用“引擎”字段来明确说明您的程序需要的节点(或其他任何版本)的版本,并且可以很好地假设它是 JavaScript。
它不一定需要与您的 github 存储库名称匹配。
所以,
node-foo
和bar-js
是坏名字。foo
或者bar
更好。 - 版本:与 semver 兼容的版本。
- 引擎:指定运行程序的节点(或其他任何版本)的版本。节点 API 变化很大,可能存在您依赖的错误或新功能。明确一点。
- 作者:相信一些。
- 脚本:如果你有特殊的编译或安装脚本,那么你应该把它放在
scripts
对象中。您绝对应该至少有一个基本的冒烟测试命令作为“scripts.test”字段。请参阅npm-scripts。 - main:如果你有一个单一的模块作为你程序的入口点(就像“foo”包在 require(“foo”) 给你的一样),那么你需要在“main”字段中指定它。
- 目录:这是一个将名称映射到文件夹的对象。最好包括“lib”和“doc”,但如果您使用“man”指定一个充满手册页的文件夹,它们将像这些一样安装。
你可在包的根目录中使用 npm init,以便开始使用非常基本的 package.json 文件。
将文件放在包外
使用.npmignore
文件将东西放在包外。如果没有.npmignore
文件,但有是一个.gitignore
文件,然后将NPM忽略由相匹配的东西.gitignore
文件。如果要包含.gitignore
文件排除的内容,可以创建一个空.npmignore
文件来覆盖它。像git
,在包的所有子目录中npm
查找.npmignore
和.gitignore
文件,而不仅仅是根目录。
.npmignore
文件遵循相同的模式规则 的.gitignore
文件:
- 空行或以 开头的行将
#
被忽略。 - 标准的 glob 模式有效。
- 您可以使用正斜杠结束模式
/
以指定目录。 - 您可以通过以感叹号开头来否定模式
!
。
默认情况下,以下路径和文件将被忽略,因此无需.npmignore
显式添加它们:
.*.swp
._*
.DS_Store
.git
.hg
.npmrc
.lock-wscript
.svn
.wafpickle-*
config.gypi
CVS
npm-debug.log
此外,node_modules
除了捆绑的依赖项外,所有内容都将被忽略。npm 会自动为你处理这个,所以不要费心添加node_modules
到.npmignore
.
以下路径和文件永远不会被忽略,因此将它们添加到 .npmignore
毫无意义:
package.json
README
(及其变体)CHANGELOG
(及其变体)LICENSE
/LICENCE
如果考虑到您的项目结构,您发现.npmignore
维护问题令人头疼,您可以尝试填充 的files
属性package.json
,该属性是应包含在您的包中的文件或目录名称数组。有时,白名单比黑名单更容易管理。
测试你的 .npmignore 或 files 配置是否有效
如果您想仔细检查您的包是否仅包含您想要发布的文件,您可以在npm pack
本地运行该命令,这将在工作目录中生成一个 tarball,与发布的方式相同。
链接包
npm link
旨在安装开发包并实时查看更改,而无需不断重新安装。(当然,您确实需要重新链接或npm rebuild -g
更新已编译的包。)
发布前:确保你的软件包安装并正常工作
这个很重要。 如果您无法在本地安装它,则在尝试发布它时会遇到问题。或者,更糟糕的是,您将能够发布它,但您将发布一个损坏或毫无意义的包。所以不要那样做。 在包的根目录中,执行以下操作:
npm install . -g
这会告诉你它正在工作。如果您只想创建一个指向您的工作目录的符号链接包,请执行以下操作:
npm link
使用npm ls -g
,看看它的存在。
要测试本地安装,请进入其他文件夹,然后执行以下操作:
cd ../some-other-folder
npm install ../my-package
将其本地安装到其他地方的 node_modules 文件夹中。 然后进入 node-repl,并尝试使用 require("my-thing") 引入模块的主模块。
创建用户账户
使用 adduser 命令创建用户。它是这样工作的:
npm adduser
然后按照提示操作。 这在npm-adduser 中有更好的记录。
发布包
这部分很容易。在文件夹的根目录中,执行以下操作:
npm publish
你可以发布一个 tarball 的 url,或者一个 tarball 的文件名,或者一个文件夹的路径。
请注意,该文件夹中的几乎所有内容都将 默认公开。因此,如果您有秘密内容,请使用 .npmignore
文件列出要忽略的 glob,或从新结帐发布。