如何使用npm在Linux服务器上构建和发布Node.js包
介绍
Node.js 是用于服务器端编程的流行 Javascript 平台,可让您快速构建和运行 Web 应用程序。
在本指南中,我们将讨论如何使用 Node.js 包管理系统 npm。 在过去的指南中,我们讨论了 如何在 Ubuntu 14.04 服务器 上安装 Node.js。 我们还讨论了如何通过搜索和获取包来使用npm作为包消费者。
现在,我们将介绍如何修改配置设置、创建和发布包,以及如何与 npm 包存储库进行交互。 让我们直接跳进去。
管理配置设置
要控制 npm 的行为,您可以调整该工具的设置。 npm 内置了很多方法来做到这一点。
列出当前配置设置
首先,让我们看看我们当前的设置是什么。 我们可以通过键入:
npm config ls
; cli configs registry = "https://registry.npmjs.org/" user-agent = "npm/1.4.9 node/v0.11.13 linux x64" ; node bin location = /home/demouser/.nvm/v0.11.13/bin/node ; cwd = /home/demouser/projects/test_package ; HOME = /home/demouser ; 'npm config ls -l' to show all defaults.
这个设置列表来自各种不同的地方,包括当前的操作环境。 它是在运行命令时构建的。 您可以通过传递 -g 标志来测试它。 它会突然显示设置了“全局”选项:
npm 配置 ls -g
; cli configs global = true注册表 = “ https://registry.npmjs.org/ ” 用户代理 = “npm/1.4.9 节点/v0.11.13 linux x64” 。 . .
目前,npm 没有从其配置文件中提取任何信息,因为 are 还没有创建配置文件。 它只是从其环境(当前目录等)中收集信息并使用应用程序默认值。
不过,我们并没有看到这个命令的大部分默认值。 要获得更广泛的信息,我们必须传递 -l 标志:
npm config ls -l
; cli configs long = true registry = "https://registry.npmjs.org/" user-agent = "npm/1.4.9 node/v0.11.13 linux x64" ; default values always-auth = false bin-links = true browser = null ca = null . . .
获取和设置特定值
如您所见,有许多键值对信息。 这就是我们在 npm 中使用配置值的方式。 例如,如果我们想查看“editor”键的当前值,我们可以输入:
npm config get editor
vi
如果我们想改变这个值,我们可以通过输入如下内容轻松地做到这一点:
npm 配置集编辑器vim
这将做两件事。 它将用我们的新值 (vim) 覆盖默认值 (vi),并且 也 创建我们的配置文件,因为它是我们的第一个自定义值。
我们的配置文件写在哪里? 我们为什么不问 npm:
npm config get userconfig
/home/demouser/.npmrc
如果我们使用 config set -g 语法设置值,它们将被写入我们的 globalconfig 文件。 我们可以通过键入以下内容来找出它的存储位置:
npm config get globalconfig
/home/demouser/.nvm/v0.11.13/etc/npmrc
您的文件位置将根据您用于安装 Node.js 的方法而有所不同。 同样,除非您偏离全局级别的默认值,否则此文件将不存在。
对于 确实 存在的文件,如果你想用你的编辑器编辑它,你可以通过键入:
npm config edit
如果尚未创建文件(手动或通过在 npm 中设置非默认值),这将不起作用。
您还可以使用以下语法为特定命令设置不同的配置选项:
npm子命令——键值
从中提取值的其他区域是项目本身的 package.json 文件和环境变量。
使用 npm 创建包
我们已经了解了一些关于如何使用 npm 作为标准包管理器来获取和管理应用程序所需的依赖项和包的知识。 但是,您也可以使用 npm 来帮助您打包和共享您的应用程序或库。
npm 帮助的第一件事就是为你的项目生成一个 package.json 文件。 在我们开始之前,您应该查看帮助页面,以便您熟悉将被询问的字段:
npm help json
进入应用程序目录后,您就可以开始了:
cd ~/projects/test_package npm init
这将提示您提供为您构建包文件所需的信息。 需要从环境中获取一些提示来填充默认值。 您的会话可能如下所示:
name: (test_package)
version: (0.0.0) 0.0.1
description: A test package
entry point: (index.js) index.js
test command: echo "test"
git repository: http://fake.git.repo.com
keywords: test
author: me
license: (ISC) GLP
About to write to /home/demouser/projects/test_package/package.json:
{
"name": "test_package",
"version": "0.0.1",
"description": "A test package",
"main": "index.js",
"dependencies": {
"express": "^4.2.0"
},
"devDependencies": {},
"scripts": {
"test": "echo \"test\""
},
"keywords": [
"test"
],
"author": "me",
"license": "GLP"
}
Is this ok? (yes) yes
如果在生成 package.json 文件后必须安装其他依赖项,则应使用 --save 标志安装它们,这将更新 package.json 文件中的依赖项列表。
如果您的包需要非常特定的版本,您可以使用 shrinkwrap 子命令。 通常,包文件将您当前的包设置为构建所需的最低可行版本。 使用收缩包装文件,这些版本是特定的并被锁定。
您可以使用以下命令创建此文件:
npm shrinkwrap
这将生成一个名为 npm-shrinkwrap.json 的文件,其中包含每个依赖项的非常详细的包信息,并且以递归方式。 如果您的应用环境很微妙,这是一个必不可少的工具。
通过 npm 与 npm 网站交互
npm 项目在 npmjs.org 维护一个包网站。 您实际上可以通过 npm 命令行工具与该站点进行交互。 我们已经讨论了如何搜索包,但还有更多功能。
首先,如果你还没有注册一个账户,你可以在 within 的 npm 界面中输入:
npm adduser
系统将要求您选择用户名、密码和电子邮件地址。 这些将被发布到网站上,就像您通过网络浏览器注册一样。
如果您检查您的配置,您应该会看到您的新帐户详细信息:
npm config ls
. . . ; userconfig /home/demouser/.npmrc editor = "vim" email = "demouser@domain.com" username = "demouser" . . .
发布你的包
当您创建了一个希望与更大的 Node.js 社区共享的包时,npm 站点是一个很好的起点。
幸运的是,npm 附带了一些帮助函数,可以帮助您入门。
如果你在你的包目录中,你可以简单地输入:
npm publish
这会将你的包推送到 npm 网站上。 此操作的成功取决于您的包具有唯一的名称和版本号。 如果你去那里搜索你的包,它应该像任何其他 Node.js 包一样被列出。
标记您的上传
您可以使用 tag 子命令标记软件包的特定版本。 在安装和依赖规范期间,这些可以用来代替版本号。
默认情况下,npm 将在您发布的任何包中包含一个标记为“最新”的标签。 这只是最近的一次推动。 您可以通过键入以下内容来查看:
npm config get tag
latest
这意味着您可以通过键入以下内容来专门请求最新版本:
npm install package@latest
如果你想为你的包/版本组合添加一个额外的标签,你可以输入如下内容:
npm标记包@版本标记名
这将使您现在可以引用由“tag_name”而不是版本号标记的版本。
更改包的所有权
默认情况下,当您发布一个包时,您将获得该包的所有权。
您可以通过键入以下内容来验证这一点:
npm 所有者 ls package_name
演示者 @领域 .com>
如果您想向项目添加其他人员,这将允许他们进行修改,您可以发出如下命令:
npm 所有者添加用户名
您也可以执行相反的操作并删除用户的权限,如下所示:
npm 所有者 rm用户名
在撰写本文时,包的所有所有者都拥有相同的权限,因此无法分配更细粒度的访问控制。
删除和弃用软件包
有时,您的包中存在重要更改,因此有必要弃用旧版本。 例如,可能存在安全问题。
使用 npm,您可以通过键入以下内容轻松地弃用软件包的版本或版本范围:
npm 弃用package_name @“ version_or_range deprecation_message_to_users ”
您选择包含的消息将作为警告显示给安装您标记的软件包版本的任何用户。
如果你想完全删除你的包,你可以通过取消发布来做到这一点。 如果您的包已被其他人使用,并且 npm 鼓励您改为弃用该包,您可能不应该这样做。 您也可以取消发布特定版本,但同样的建议也成立。
需要注意的重要一点是,即使您取消发布包并将其从站点中删除,它所包含的名称/版本组合也永远无法重用。 这是为了确保人们不会意外拉错包裹。
取消发布您的作品的语法是:
npm unpublish package_name @版本
如果你想删除整个包,你可以去掉 @version。 在这种情况下,您必须添加 --force 标志以避免意外删除整个项目:
npm unpublish --force package_name
结论
您现在应该对如何在 Node.js 项目中利用 npm 的强大功能有了相当深入的了解。 npm 实用程序可用于协助项目开发的大部分领域,从构建文件和获取依赖项,到发布包和部署到生产中。