NPM 包/模块开发的注意事项

🌙
手机阅读
本文目录结构

npm developers 功能

开发人员指南

npm developers 说明

因此,您已经决定使用 npm 来开发(也许发布/部署)您的项目。

在用户将要安装程序的简单步骤之上,您需要做一些事情。

关于这些文件

这些是手册页。如果安装 npm,则应该能够 man npm-thing 获取特定主题的文档或 npm help thing 查看相同的信息。

什么是包

一个包是:

  • a)包含package.json文件描述的程序的文件夹
  • b)一个压缩的 tarball,其中包含 (a)
  • c)解析为(b)的网址
  • d)在(a)注册表中发布的<name>@<version> (C)
  • e)<name>@<tag>指向(d)的
  • f)<name>具有满足(e)的"latest"标签的
  • g)一个 git 网址,克隆后会生成(a)。

即使您从未发布过软件包,如果您只想编写一个节点程序(a),或者如果您还希望能够在打包后将其轻松安装到其他地方,使用 npm 仍然可以获得很多好处。放入压缩档(b)。

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 以获取有关该文件中内容的详细信息。至少,您需要:

  • name:这应该是一个标识您的项目的字符串。请不要使用该名称指定它在节点上运行还是在 JavaScript 中运行。您可以使用“ engines”字段来明确声明程序所需的节点(或其他任何版本)的版本,并且完全假定它是 JavaScript。

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

    • 所以,node-foo 和 bar-js 是坏的名字。 foo 还是 bar 更好。

  • version:与 semver 兼容的版本。

  • engines:指定您的程序在其上运行的节点(或其他任何版本)的版本。节点 API 发生了很大的变化,并且可能存在您依赖的 bug 或新功能。要明确。

  • author :相信一点。

  • scripts :如果您有特殊的编译或安装脚本,则应将其放在 scripts 对象中。绝对应该至少有一个基本的冒烟测试命令作为“ scripts.test”字段。参见 npm-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
  • .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 或文件配置是否有效

如果要再次检查软件包在发布时将仅包含要发送到的文件,则可以在 npm pack 本地运行命令,该命令将在工作目录中生成压缩包,与发布时相同。

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

您可以提供发布 tarball 的 url 或 tarball 的文件名或文件夹的路径。

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

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了