阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      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 或从新的签出中发布。

      目录
      目录