阅读(2902) (12)

npm 开发者指南

2021-09-03 14:37:46 更新

介绍

因此,你已经决定使用 npm 来开发(并且可能发布/部署)你的项目。 这是很好的一件事! 除了用户安装程序所需要执行的简单步骤之外,你可能还需要执行另外的一些操作。

关于文件

这些是手册页。 如果你已经安装了 npm,那么我相信你应该能够通过npm thing获取特定主题的文档,或者使用npm help thing查看相同的信息。

什么是包(package)?

包是:

  1. 包含有 package.json 文件描述的程序的文件夹。
  2. 包含有(1)的 gzip 压缩包。
  3. 解析为(2)的网址。
  4. <name>@<version>与(3)在注册表上发布的(1)。
  5. (1)<name>@<tag>指向(4).
  6. <name>具有满足(5)的 “最新” 标签的1.
  7. 一个 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-foobar-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,或从新结帐发布。