开发者

开发者指南

选择 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-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。默认值是存储库用作其默认分支的任何内容。

package.json 文件

您需要在项目的根目录中有一个 package.json 文件才能使用 npm 做任何事情。这基本上是整个界面。

有关该文件中包含的内容的详细信息,请参阅 package.json。至少,您需要

  • name: 这应该是一个标识您的项目的字符串。请勿使用名称来指定它在 node 上运行,或使用 JavaScript。您可以使用“engines”字段明确说明您的程序所需的 node(或其他任何东西)的版本,并且可以很好地假设它是 JavaScript。

    它不一定需要与您的 github 存储库名称匹配。

    因此,node-foobar-js 是不好的名称。 foobar 更好。

  • 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.jsonfiles 属性,该属性是一个包含应包含在软件包中的文件或目录名称的数组。 有时,手动选择允许哪些项目比构建阻止列表更容易管理。

测试您的 .npmignorefiles 配置是否有效

如果您想仔细检查发布时软件包是否只包含您想要包含的文件,可以在本地运行 npm pack 命令,它将在工作目录中生成一个 tarball,与发布时相同。

npm link 用于安装开发包并实时查看更改,无需不断重新安装。(当然,您需要重新链接或 npm rebuild -g 来更新已编译的软件包。)

更多信息,请访问 npm link

发布之前:确保您的包安装并运行

这很重要。

如果您无法在本地安装它,您在尝试发布它时将遇到问题。 更糟糕的是,您能够发布它,但发布的是一个损坏的或毫无意义的软件包。 所以不要这样做。

在软件包的根目录中,执行以下操作

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

您可以为 publish 提供 tarball 的 URL、tarball 的文件名或文件夹的路径。

请注意,默认情况下,该文件夹中的几乎所有内容都将被公开。 因此,如果您在那里有秘密内容,请使用 .npmignore 文件列出要忽略的 glob,或从新签出进行发布。

吹嘘一下

发送电子邮件、撰写博客文章、在 IRC 中闲聊。

告诉全世界安装您的程序有多么容易!

另请参见