Node.js 官网入门教程(二) npm(安装、包版本、卸载、npx)、package.json(scripts、devDependencies)package-lock.json(语义版本规则符号

本文详细介绍了Node.js中的npm包管理器,包括npm的安装、包版本控制、卸载、npx的使用,以及package.json和package-lock.json文件的作用和语义版本规则。内容涵盖npm的基本操作,如安装、更新、卸载包,同时讲解了package.json中的scripts、devDependencies等属性,以及如何使用package-lock.json确保依赖一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Node.js 官网入门教程(二) npm(包管理、安装、包版本、卸载、npx)、package.json(scripts、devDependencies)、package-lock.json(语义版本规则符号)

总结:

  • 通用

    • Node.js安装包:http://nodejs.cn/download/。
    • API检索网址:API 文档 | Node.js 中文网 (nodejs.cn)
    • 第三方模板引擎:art-template官方文档
    • Express: 提供了创建 Web 服务器的最简单但功能最强大的方法之一。 它的极简主义方法,专注于服务器的核心功能,是其成功的关键。
    • koa: 由 Express 背后的同一个团队构建,旨在变得更简单更轻巧。 新项目的诞生是为了满足创建不兼容的更改而又不破坏现有社区。
    • readyState
      • 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
      • 0: 请求未初始化
      • 1: 服务器连接已建立
      • 2: 请求已接收
      • 3: 请求处理中
      • 4: 请求已完成,且响应已就绪
    • status
      • 200, OK,访问正常
      • 301, Moved Permanently,永久移动
      • 302, Moved temporarily,暂时移动
      • 304, Not Modified,未修改
      • 307, Temporary Redirect,暂时重定向
      • 401, Unauthorized,未授权
      • 403, Forbidden,禁止访问
      • 404, Not Found,未发现指定网址
      • 500, Internal Server Error,服务器发生错误
  • lodash

  • npx

    • npx是一个工具,npm v5.2.0引入的一条命令(npx),一个npm包执行器,指在提高从npm注册表使用软件包时的体验 ,npm使得它非常容易地安装和管理托管在注册表上的依赖项,npx使得使用CLI工具和其他托管在注册表。它大大简化了一些事情。
    • 就像npm极大地提升了我们安装和管理包依赖的体验,在npm的基础之上,npx让npm包中的命令行工具和其他可执行文件在使用上变得更加简单。它极大地简化了我们之前使用纯粹的npm时所需要的大量步骤。
    • 主要特点
      • 临时安装可执行依赖包,不用全局安装,不用担心长期的污染
      • 可以执行依赖包中的命令,安装完成自动运行。
      • 自动加载node_modules中依赖包,不用指定$PATH。
      • 可以指定node版本、命令的版本,解决了不同项目使用不同版本的命令的问题。
  • npm

    • Yarn 是 npm 的一个替代选择。

    • 默认软件包会被安装到当前文件树中的 node_modules 子文件夹下

    • 使用 -g 标志可以执行全局安装

    • 把可执行文件放到 node_modules/.bin/ 文件夹下

    • 升级

      • 若要将所有软件包更新到新的主版本,则全局地安装 npm-check-updates 软件包:

        npm install -g npm-check-updates
        

        然后运行:

        ncu -u
        

        这会升级 package.json 文件的 dependenciesdevDependencies 中的所有版本,以便 npm 可以安装新的主版本。

  • package.json

    • main 设置了应用程序的入口点。

    • scripts 定义了一组可以运行的 node 脚本

    • private 如果设置为 true,则可以防止应用程序/软件包被意外地发布到 npm

    • dependencies 设置了作为依赖安装的 npm 软件包的列表。

    • devDependencies 设置了作为开发依赖安装的 npm 软件包的列表。

      它们不同于 dependencies,因为它们只需安装在开发机器上,而无需在生产环境中运行代码

    • engines 设置了此软件包/应用程序在哪个版本的 Node.js 上运行。

    • browserslist 用于告知要支持哪些浏览器(及其版本)

  • package-lock.json

    • 会固化当前安装的每个软件包的版本,当运行 npm install时,npm 会使用这些确切的版本。
    • 如果写入的是 〜0.13.0,则只更新补丁版本:即 0.13.1 可以,但 0.14.0 不可以。
    • 如果写入的是 ^0.13.0,则要更新补丁版本和次版本:即 0.13.10.14.0、依此类推。
    • 如果写入的是 0.13.0,则始终使用确切的版本。
  • 语义版本

    语义版本控制的概念很简单:所有的版本都有 3 个数字:x.y.z

    • 第一个数字是主版本。
    • 第二个数字是次版本。
    • 第三个数字是补丁版本。
      • ^: 只会执行不更改最左边非零数字的更新。 如果写入的是 ^0.13.0,则当运行 npm update 时,可以更新到 0.13.10.13.2 等,但不能更新到 0.14.0 或更高版本。 如果写入的是 ^1.13.0,则当运行 npm update 时,可以更新到 1.13.11.14.0 等,但不能更新到 2.0.0 或更高版本。
      • ~: 如果写入的是 〜0.13.0,则当运行 npm update 时,会更新到补丁版本:即 0.13.1 可以,但 0.14.0 不可以。
      • >: 接受高于指定版本的任何版本。
      • >=: 接受等于或高于指定版本的任何版本。
      • <=: 接受等于或低于指定版本的任何版本。
      • <: 接受低于指定版本的任何版本。
      • =: 接受确切的版本。
      • -: 接受一定范围的版本。例如:2.1.0 - 2.6.2
      • ||: 组合集合。例如 < 2.1 || > 2.6
  • 卸载npm包

    • 移除 package.json 文件中的引用:使用 -S--save 标志
    • 如果程序包是开发依赖项(列出在 package.json 文件的 devDependencies 中),则必须使用 -D--save-dev 标志从文件中移除
    • 如果该软件包是全局安装的,则需要添加 -g--global 标志

1. npm 包管理器简介

npm 简介

npm 是 Node.js 标准的软件包管理器。

在 2017 年 1 月时,npm 仓库中就已有超过 350000 个软件包,这使其成为世界上最大的单一语言代码仓库,并且可以确定几乎有可用于一切的软件包。

它起初是作为下载和管理 Node.js 包依赖的方式,但其现在也已成为前端 JavaScript 中使用的工具。

npm 有很多功能。

Yarn 是 npm 的一个替代选择。

下载

npm 可以管理项目依赖的下载。

安装所有依赖

如果项目具有 package.json 文件,则通过运行:

npm install

它会在 node_modules 文件夹(如果尚不存在则会创建)中安装项目所需的所有东西。

安装单个软件包

也可以通过运行以下命令安装特定的软件包:

npm install <package-name>

通常会在此命令中看到更多标志:

  • --save 安装并添加条目到 package.json 文件的 dependencies。
  • --save-dev 安装并添加条目到 package.json 文件的 devDependencies。

区别主要是,devDependencies 通常是开发的工具(例如测试的库),而 dependencies 则是与生产环境中的应用程序相关。

更新软件包

通过运行以下命令,更新也变得很容易:

npm update

npm 会检查所有软件包是否有满足版本限制的更新版本。

也可以指定单个软件包进行更新:

npm update <package-name>

版本控制

除了简单的下载外,npm 还可以管理版本控制,因此可以指定软件包的任何特定版本,或者要求版本高于或低于所需版本。

很多时候,一个库仅与另一个库的主版本兼容。

或者,一个库的最新版本中有一个缺陷(仍未修复)引起了问题。

指定库的显式版本还有助于使每个人都使用相同的软件包版本,以便整个团队运行相同的版本,直至 package.json 文件被更新。

在所有这些情况中,版本控制都有很大的帮助,npm 遵循语义版本控制标准。

运行任务

package.json 文件支持一种用于指定命令行任务(可通过使用以下方式运行)的格式:

npm run <task-name>

例如:

{
   
   
  "scripts": {
   
   
    "start-dev": "node lib/server-development",
    "start": "node lib/server-production"
  },
}

使用此特性运行 Webpack 是很常见的:

{
   
   
  "scripts": {
   
   
    "watch": "webpack --watch --progress --colors --config webpack.conf.js",
    "dev": "webpack --progress --colors --config webpack.conf.js",
    "prod": "NODE_ENV=production webpack -p --config webpack.conf.js",
  },
}

因此可以运行如下,而不是输入那些容易忘记或输入错误的长命令:

$ npm run watch
$ npm run dev
$ npm run prod

2. npm 将软件包安装到哪里

当使用 npm 安装软件包时,可以执行两种安装类型:

  • 本地安装
  • 全局安装

默认情况下,当输入 npm install 命令时,例如:

npm install lodash

软件包会被安装到当前文件树中的 node_modules 子文件夹下

在这种情况下,npm 还会在当前文件夹中存在的 package.json 文件的 dependencies 属性中添加 lodash 条目。

使用 -g 标志可以执行全局安装

npm install -g lodash

在这种情况下,npm 不会将软件包安装到本地文件夹下,而是使用全局的位置。

全局的位置到底在哪里?

npm root -g 命令会告知其在计算机上的确切位置。

在 macOS 或 Linux 上,此位置可能是 /usr/local/lib/node_modules。 在 Windows 上,可能是 C:\Users\YOU\AppData\Roaming\npm\node_modules

但是,如果使用 nvm 管理 Node.js 版本,则该位置会有所不同。

例如,使用 nvm,则软件包的位置可能为 /Users/joe/.nvm/versions/node/v8.9.0/lib/node_modules

3. 如何使用或执行 npm 安装的软件包

当使用 npm 将软件包安装到 node_modules 文件夹中或全局安装时,如何在 Node.js 代码中使用它?

假设使用以下命令安装了流行的 JavaScript 实用工具库 lodash

npm install lodash

这会把软件包安装到本地的 node_modules 文件夹中

若要在代码中使用它,则只需使用 require 将其导入到程序中:

const _ = require('lodash')

如果软件包是可执行文件,该怎么办?

在这种情况下,它会把可执行文件放到 node_modules/.bin/ 文件夹下。

验证这一点的简单示例是 cowsay

cowsay 软件包提供了一个命令行程序,可以执行该程序以使母牛说些话(以及其他动物也可以说话)。

当使用 npm install cowsay 安装软件包时,它会在 node_modules 文件夹中安装自身以及一些依赖包:

node_modules 文件夹的内容

有一个隐藏的 .bin 文件夹,其中包含指向 cowsay 二进制文件的符号链接:

二进制文件

=如何执行这些可执行文件

可以输入 ./node_modules/.bin/cowsay 来运行它,但是最新版本的 npm(自 5.2 起)中包含的 npx 是更好的选择。 只需运行:

npx cowsay

则 npx 会找到程序包的位置。

母牛说话

4. package.json 指南

如果使用 JavaScript、或者曾经与 JavaScript 项目、Node.js 或前端项目进行过交互,则肯定会遇到过 package.json 文件。

它有什么用途?应该了解它的什么,可以使用它完成哪些有趣的事情?

package.json 文件是项目的清单。 它可以做很多完全互不相关的事情。 例如,它是用于工具的配置中心。 它也是 npmyarn 存储所有已安装软件包的名称和版本的地方

文件结构

这是一个示例的 package.json 文件:

{
   
   }

它是空的! 对于应用程序,package.json 文件中的内容没有固定的要求。 唯一的要求是必须遵守 JSON 格式,否则,尝试以编程的方式访问其属性的程序则无法读取它。

如果要构建要在 npm 上分发的 Node.js 软件包,则必须具有一组可帮助其他人使用它的属性。 稍后会详细介绍。

这是另一个 package.json:

{
   
   
  "name": "nodejs_cn"
}

它定义了 name 属性,用于告知应用程序或软件包的名称。

这是一个更复杂的示例,该示例是从 Vue.js 应用程序示例中提取的:

{
   
   
  "name"
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChrisP3616

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值