Node.js NPM 教程

NPM 介绍

NPM 是 Node Package Manager 的缩写,意思是Node包管理器。

NPM 是 Node.js 的默认包管理器,完全用JavaScript编写。它由Isaac Z. Schlueter开发,并于2010年发布。

从那时起,NPM负责管理所有Node.js包和模块。www.npmjs.com上有海量的Node.js包,完全免费,开源,全世界的开发者可以在上面共享Node.js包。

NPM的两个主要功能是:

  • 为 Node.js 的包/模块提供了在线存储库,你可以在其官方站点上方便地搜索这些包/模块。
  • 提供了一个命令行程序(CLI),帮助开发人员管理Node.js包。

注意,Node.js项目中,任何包或模块都需要通过NPM安装。

NPM 安装

从0.6.3版本开始,NPM就作为Node.js的默认包,包含在Node.js中。安装Node.js的同时,会默认安装NPM。可以从Node.js官网:https://nodejs.org下载安装Node.js。

检查NPM是否已经安装,可以使用下面的命令。

$ npm -v

NPM 作用

NPM 作用很多,下面列出了最基本的几点:

  • NPM 可以让我们充分利用其他开发人员的工作,将其他包轻松合并到我们的项目中
  • NPM 帮助下载各种独立的工具,可以立即使用
  • 使用 npx,你甚至可以不下载包,就直接运行它
  • NPM 创建各种组织来协调包的开发和维护
  • NPM 可以帮助组建虚拟团队,甚至可以将代码限制到特定的开发人员
  • NPM 帮助管理和维护各种版本的代码及其依赖关系
  • NPM 帮助自动更新应用程序
  • NPM 就像一个社区,在这里,你总可以找到从事类似项目的其他开发人员,与他们共享成果

现在,你已经知道了NPM的作用,让我们继续深入研究。首先,让我们了解什么是npm包/模块。

NPM 包(Package)

包是打包成独立逻辑单元的一组代码。对于开发人员来说,包是方便的工具,包有助于代码重用,项目结构优化。NPM社区内,大约有800,000多个现成的代码包可用,每个包都提供了各种有用的功能。

但是,如果你不能确切地知道哪种包最适用,那就无异于大海捞针。下面列出了常用的NPM库,供参考:

  • express
  • body-parser
  • nodemon
  • lodash
  • babel-core
  • async
  • debug
  • react
  • vue
  • request
  • moment

使用这些包之前,需要在系统中安装NPM。

NPM 管理包

根据安装方式的不同,Node.js包可分为两类:

  • 本地包(Local Packages)
  • 全局包(Global Packages)
本地包(Local Packages)

这些包安装在执行 install 命令的当前目录下,存储在当前目录下的node_modules文件夹中,只有当前目录下的项目才能使用。

下面是本地安装包的命令:

npm install <package-name>
全局包(Global Packages)

这些包安装在系统中的一个位置,与执行install命令的目录位置无关。全局包可以被系统中的任何项目使用。

要安装全局包包,可以使用以下命令:

npm install -g <package-name>

下面这些常用的包,通常会全局安装:

  • npm
  • create-react-app
  • vue-cli
  • grunt-cli
  • mocha
  • react-native-cli
  • gatsby-cli
  • forever
  • nodemon
本地包与全局包的区别

本地包和全局包之间的主要区别是,全局包用于多个项目,本地包仅用于单个项目。但是一般来说,本地安装包是一个很好的实践。因为系统中可能有许多Node.js项目,使用的包虽相同,但版本不同,本地安装可以避免版本冲突。

例如,如果更新一个全局包,所有依赖它的项目都会被影响,有可能部分项目与包的新版本不兼容。但是对于本地包,因为仅限于单个项目使用,所以本地包更新不会影响其他项目。就资源利用而言,本地安装似乎浪费硬盘空间,但是负面影响较小,毕竟硬件总是越来越便宜。

可以通过下面的命令,来检查系统中有多少全局包。

npm list -g --depth 0

如果想删除包,可以下命令:

npm uninstall <package_name>

安装包时,建议包含--save标志:

npm install <package_name> --save

作用是把安装的包添加到package.json文件中。

现在,你已经知道怎么安装、删除包。

NPM Package.json

Node.js项目中,Package.json文件是应用程序的核心。Package.json文件是一个保存了项目元数据的配置文件,通常出现在Node.js应用程序的根文件夹中,npm install命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。

Package.json 格式

Package.json文件内容通常如下所示。

{
    "name": "Hello World",
    "version": "0.0.1",
    "author": "qikegu.com",
    "description": "第一个node.js程序",
    "keywords":["node.js","javascript"],
    "repository": {
        "type": "git",
        "url": "https://path/to/url"
    },
    "license":"MIT",
    "engines": {"node": "0.10.x"},
    "bugs":{"url":"http://path/to/bug","email":"bug@example.com"},
    "contributors":[{"name":"李四","email":"lisi@example.com"}],
    "scripts": {
        "start": "node index.js"
    },
    "dependencies": {
        "express": "latest",
        "mongoose": "~3.8.3",
        "handlebars-runtime": "~1.0.12",
        "express3-handlebars": "~0.5.0",
        "MD5": "~1.2.0"
    },
    "devDependencies": {
        "bower": "~1.2.8",
        "grunt": "~0.4.1",
        "grunt-contrib-concat": "~0.3.0",
        "grunt-contrib-jshint": "~0.7.2",
        "grunt-contrib-uglify": "~0.2.7",
        "grunt-contrib-clean": "~0.5.0",
        "browserify": "2.36.1",
        "grunt-browserify": "~1.3.0",
    }
}

如上所示,package.json文件包含了项目中各种信息配置。让我们详细了解一下一些常用信息:

  • Name: 应用程序名称
  • Version: 应用程序的版本
  • Description: 应用程序描述信息
  • Main: 指定了加载的入口文件,require(‘moduleName’)就会加载这个文件。这个字段的默认值是模块根目录下面的index.js。
  • Scripts: 指定了运行脚本命令的npm命令行缩写,比如start指定了运行npm run start时,所要执行的命令。
  • Author: 开发人员
  • License: 许可证
  • Dependencies: 指定了项目运行所依赖的模块
  • DevDependencies: 指定项目开发所需要的模块
  • Repository: 关于应用程序代码所在的存储库信息及网址等
  • Bugs: 报告应用程序bug的网址或电子邮件
Package.json 使用

package.json文件可以手工编写,也可以使用npm init命令自动生成。

$ npm init

这个命令采用互动方式,要求用户回答一些问题,然后在当前目录生成一个基本的package.json文件。所有问题之中,只有项目名称(name)和项目版本(version)是必填的,其他都是选填的。

有了package.json文件,直接使用npm install命令,就会在当前目录中安装所需要的模块。

$ npm install

如果一个模块不在package.json文件之中,可以单独安装这个模块,并使用相应的参数,将其写入package.json文件之中。

$ npm install express --save
$ npm install express --save-dev

上面代码表示单独安装express模块,--save参数表示将该模块写入dependencies属性,--save-dev表示将该模块写入devDependencies属性。

posted @ 2022-08-26 14:21  Binge-和时间做朋友  阅读(211)  评论(0编辑  收藏  举报