目录
开发者
选择 CLI 版本
目录
描述
因此,您已决定使用 npm 来开发(也许还会发布/部署)您的项目。
太棒了!
除了用户安装您的程序的简单步骤外,您还需要做几件事。
关于这些文档
这些是手册页。如果您安装了 npm,您应该能够执行 man npm-thing
来获取有关特定主题的文档,或者 npm help thing
来查看相同的信息。
什么是包
包是
- a) 包含由 package.json 文件描述的程序的文件夹
- b) 包含 (a) 的压缩 tarball
- c) 解析为 (b) 的 URL
- d) 在注册表中发布的
<name>@<version>
,并包含 (c) - e) 指向 (d) 的
<name>@<tag>
- f) 具有满足 (e) 的“最新”标签的
<name>
- g) 克隆后将生成 (a) 的
git
URL。
即使您从未发布您的包,如果您只是想编写一个 node 程序 (a),以及也许您还想在将它打包成一个 tarball (b) 后能够轻松地安装它在其他地方,那么您仍然可以从使用 npm 中获得很多好处。
Git URL 可以采用以下形式
git://github.com/user/project.git#commit-ishgit+ssh://user@hostname:project.git#commit-ishgit+http://user@hostname/project/blah.git#commit-ishgit+https://user@hostname/project/blah.git#commit-ish
commit-ish
可以是任何标签、sha 或分支,可以作为参数传递给 git checkout
。默认值是存储库用作其默认分支的任何内容。
package.json 文件
您需要在项目的根目录中有一个 package.json
文件才能使用 npm 做任何事情。这基本上是整个界面。
有关该文件中包含的内容的详细信息,请参阅 package.json
。至少,您需要
-
name: 这应该是一个标识您的项目的字符串。请勿使用名称来指定它在 node 上运行,或使用 JavaScript。您可以使用“engines”字段明确说明您的程序所需的 node(或其他任何东西)的版本,并且可以很好地假设它是 JavaScript。
它不一定需要与您的 github 存储库名称匹配。
因此,
node-foo
和bar-js
是不好的名称。foo
或bar
更好。 -
version: 一个与 semver 兼容的版本。
-
engines: 指定您的程序运行的 node(或其他任何东西)的版本。node API 变化很大,您可能依赖于某些错误或新功能。要明确。
-
author: 留下您的署名。
-
scripts: 如果您有特殊的编译或安装脚本,则应将其放在
scripts
对象中。您绝对应该至少有一个基本的冒烟测试命令作为“scripts.test”字段。请参阅 scripts。 -
main: 如果您有一个用作程序入口点的单个模块(例如“foo”包在 require("foo") 中提供给您的内容),那么您需要在“main”字段中指定它。
-
directories: 这是一个将名称映射到文件夹的对象。最适合包含的名称是“lib”和“doc”,但是如果您使用“man”来指定一个装满手册页的文件夹,那么它们将像这些手册页一样安装。
您可以在包的根目录中使用 npm init
来帮助您开始使用一个非常基本的 package.json 文件。有关更多信息,请参阅 npm init
。
将文件排除在包之外
使用 .npmignore
文件将内容排除在包之外。如果没有 .npmignore
文件,但存在 .gitignore
文件,则 npm 将忽略与 .gitignore
文件匹配的内容。如果您想要包含被 .gitignore
文件排除的内容,您可以创建一个空的 .npmignore
文件来覆盖它。与 git
一样,npm
会在包的所有子目录中查找 .npmignore
和 .gitignore
文件,而不仅仅是根目录。
.npmignore
文件遵循与 相同的模式规则 作为 .gitignore
文件
- 空行或以
#
开头的行将被忽略。 - 标准 glob 模式有效。
- 您可以使用正斜杠
/
结束模式以指定目录。 - 您可以通过在模式前加上感叹号
!
来否定该模式。
默认情况下,以下路径和文件会被忽略,因此无需将其显式添加到 .npmignore
中。
.*.swp
._*
.DS_Store
.git
.gitignore
.hg
.npmignore
.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
会给维护带来麻烦,您可以尝试填充 package.json
的 files
属性,该属性是一个包含应包含在软件包中的文件或目录名称的数组。 有时,手动选择允许哪些项目比构建阻止列表更容易管理。
测试您的 .npmignore
或 files
配置是否有效
如果您想仔细检查发布时软件包是否只包含您想要包含的文件,可以在本地运行 npm pack
命令,它将在工作目录中生成一个 tarball,与发布时相同。
链接包
npm link
用于安装开发包并实时查看更改,无需不断重新安装。(当然,您需要重新链接或 npm rebuild -g
来更新已编译的软件包。)
更多信息,请访问 npm link
。
发布之前:确保您的包安装并运行
这很重要。
如果您无法在本地安装它,您在尝试发布它时将遇到问题。 更糟糕的是,您能够发布它,但发布的是一个损坏的或毫无意义的软件包。 所以不要这样做。
在软件包的根目录中,执行以下操作
npm install . -g
这将向您展示它是否有效。如果您只想创建一个指向工作目录的符号链接软件包,则执行以下操作
npm link
使用 npm ls -g
查看它是否在那里。
要测试本地安装,请进入其他文件夹,然后执行以下操作
cd ../some-other-foldernpm install ../my-package
在该其他位置的 node_modules 文件夹中进行本地安装。
然后进入 node-repl,尝试使用 require("my-thing") 引入模块的主模块。
创建用户帐户
使用 adduser 命令创建用户。 它这样工作
npm adduser
然后按照提示操作。
这在 npm adduser 中有更好的文档。
发布您的包
这一部分很简单。 在文件夹的根目录中,执行以下操作
npm publish
您可以为 publish 提供 tarball 的 URL、tarball 的文件名或文件夹的路径。
请注意,默认情况下,该文件夹中的几乎所有内容都将被公开。 因此,如果您在那里有秘密内容,请使用 .npmignore
文件列出要忽略的 glob,或从新签出进行发布。
吹嘘一下
发送电子邮件、撰写博客文章、在 IRC 中闲聊。
告诉全世界安装您的程序有多么容易!