关于npm

栏目: Node.js · 发布时间: 5年前

内容简介:npm全称为Node Package Manager,是一个基于Node.js的包管理器,也是整个Node.js社区最流行、支持的第三方模块最多的包管理器。JavaScript开发人员更容易分享和重用代码。npm版本查询npm -v

npm全称为Node Package Manager,是一个基于Node.js的包管理器,也是整个Node.js社区最流行、支持的第三方模块最多的包管理器。

npm的初衷:

JavaScript开发人员更容易分享和重用代码。

npm的使用场景:

  • 允许用户获取第三方包并使用。

  • 允许用户将自己编写的包或命令行程序进行发布分享。

npm版本查询npm -v

npm安装:

1、安装nodejs

由于新版的nodejs已经集成了npm,所以可直接通过输入npm -v来测试是否成功安装。

2、使用npm命令来升级npm: npm install npm -g

二、npm的工作原理:

包和模块

什么是包(package)?

包是描述一个文件或一个目录。一个包的配置通常由以下构成:

  • 一个文件夹包含一个package.json配置文件。
  • 包含(含有package.json文件的文件夹)的Gzip压缩文件。
  • 解析gzip的url
  • 为注册表添加@的url 信息

注意的是即使你从来没有在注册中心发布你的公共包,你可能仍然可以得到很多所有这些package, 使用npm的好处:

  • 如果你只是计划想写增加一个节点或/。
  • 如果你安装它也希望在其他地方分成一个tarball后进行包装

2.什么是模块(module)?

模板是通过配置文件中的一个dom节点进行包含一个或多个包。通常一般由包和配置文件以及相关模块程序构成完成一个或多个业务功能操作。

一个模块可以在node . js 程序中装满任何的require()任何。 以下是所有事物加载模块的例子 :

  • 一个文件夹package.json文件包含一个main字段。

  • 一个文件夹index.js文件。

  • 一个JavaScript文件。

3.npm的包和模块的关系:

一般来说在js程序中使用require加载它们的模块在节点中进行配置npm包,一个模块不一定是一个包。

例如,一些cli包, js程序节点中只包含一个可执行的 命令行界面,不提供main字段。 那么这些包不是模块。

几乎所有npm包(至少,那些节点计划)包含许多模块在他们(因为每个文件加载require()是一个模块)。

几乎所有的npm包都关联着多个模块,因为每个文件都使用require()加载一个模块。

从module加载文件中的上下文node节点。如:var req = require('request')。我们可能会说,“request模块赋值给req这个变量”。

4.npm的生态系统:

package.json文件定义的是包。

node_modules文件夹是存储模块的地方。便于js查找模块。

如果创建一个node_modules/foo.js文件,通过var f=require('foo.js')进行加载模块。因为它没有package.json文件所以foo.js不是一个包。

如果没有创建index.js包或者package.json文件"main"字段,即使是在安装node_modules,因为它没有require()所以它不是一个模块。

使用

npm init

npm init 用来初始化生成一个新的 package.json 文件。它会向用户提问一系列问题,如果你觉得不用修改默认配置,一路回车就可以了。

如果使用了 -f(代表force)、-y(代表yes),则跳过提问阶段,直接生成一个新的 package.json 文件。

$ npm init -y
复制代码

npm set

npm set 用来设置环境变量

$ npm set init-author-name 'Your name'
$ npm set init-author-email 'Your email'
$ npm set init-author-url 'http://yourdomain.com'
$ npm set init-license 'MIT'
!
复制代码

上面命令等于为 npm init 设置了默认值,以后执行 npm init 的时候,package.json 的作者姓名、邮件、主页、许可证字段就会自动写入预设的值。这些信息会存放在用户主目录的 ~/.npmrc文件,使得用户不用每个项目都输入。如果某个项目有不同的设置,可以针对该项目运行 npm config。

npm info

npm info 命令可以查看每个模块的具体信息。比如,查看 underscore 模块的信息。

$ npm info underscore
复制代码

上面命令返回一个 JavaScript 对象,包含了 underscore 模块的详细信息。这个对象的每个成员,都可以直接从 info 命令查询。

$ npm info underscore description

$ npm info underscore homepage

$ npm info underscore version

复制代码

npm search

npm search 命令用于搜索 npm 仓库,它后面可以跟字符串,也可以跟正则表达式。

$ npm search <搜索词>
复制代码

npm list

npm list 命令以树形结构列出当前项目安装的所有模块,以及它们依赖的模块。

$ npm list

# 加上 global 参数,会列出全局安装的模块
$ npm list -global

# npm list 命令也可以列出单个模块
$ npm list underscore
复制代码

npm install

使用 npm 安装包的命令格式为:

npm [install/i] [package_name]

本地模式和全局模式

npm 在默认情况下会从npmjs.org 搜索或下载包,将包安装到当前目录的 node_modules 子目录下。

如果你熟悉 Ruby 的 gem 或者 Python 的 pip,你会发现 npm 与它们的行为不同,gem 或 pip 总是以全局模式安装,使包可以供所有的程序使用,而 npm 默认会把包安装到当前目录下。这反映了 npm 不同的设计哲学。如果把包安装到全局,可以提供程序的重复利用程度,避免同样的内容的多分副本,但坏处是难以处理不同的版本依赖。如果把包安装到当前目录,或者说本地,则不会有不同程序依赖不同版本的包的冲突问题,同时还减轻了包作者的 API 兼容性压力,但缺陷则是同一个包可能会被安装许多次。

我们在使用 supervisor 的时候使用了 npm install -g supervisor 命令,就是以全局模式安装 supervisor 。

这里注意一点的就是,supervisor 必须安装到全局,如果你不安装到全局,错误命令会提示你安装到全局。如果不想安装到默认的全局,也可以自己修改全局路径到当前路径 npm config set prefix "路径" 安装完以后就可以用 supervisor 来启动服务了。

supervisor 可以帮助你实现这个功能,它会监视你对代码的驱动,并自动重启 Node.js 。

一般来说,全局安装只适用于 工具 模块,比如 eslint 和 gulp 。关于使用全局模式,多数时候并不是因为许多程序都有可能用到了它,为了减少多重副本而使用全局模式,而是因为本地模式不会注册 PATH 环境变量。

“本地安装”指的是将一个模块下载到当前项目的 node_modules 子目录,然后只有在项目目录之中,才能调用这个模块。

关于npm
# 本地安装
$ npm install <package name>

# 全局安装
$ sudo npm install -global <package name>
$ sudo npm install -g <package name>
复制代码

npm install 也支持直接输入 Github 代码库地址。

$ npm install git://github.com/package/path.git
$ npm install git://github.com/package/path.git#0.1.0
复制代码

安装之前,npm install 会先检查,node_modules 目录之中是否已经存在指定模块。如果存在,就不再重新安装了,即使远程仓库已经有了一个新版本,也是如此。

果你希望,一个模块不管是否安装过, npm 都要强制重新安装,可以使用 -f 或 --force 参数。

$ npm install <packageName> --force

复制代码

安装不同版本

install 命令总是安装模块的最新版本,如果要安装模块的特定版本,可以在模块名后面加上 @ 和版本号。

$ npm install sax@latest
$ npm install sax@0.1.1
$ npm install sax@">=0.1.0 <0.2.0"
复制代码

install 命令可以使用不同参数,指定所安装的模块属于哪一种性质的依赖关系,即出现在 packages.json 文件的哪一项中。

–save:模块名将被添加到 dependencies,可以简化为参数-S。
–save-dev:模块名将被添加到 devDependencies,可以简化为参数-D。

$ npm install sax --save
$ npm install node-tap --save-dev
# 或者
$ npm install sax -S
$ npm install node-tap -D
复制代码

dependencies 依赖

这个可以说是我们 npm 核心一项内容,依赖管理,这个对象里面的内容就是我们这个项目所依赖的 js 模块包。下面这段代码表示我们依赖了 markdown-it 这个包,版本是 ^8.1.0 ,代表最小依赖版本是 8.1.0 ,如果这个包有更新,那么当我们使用 npm install 命令的时候,npm 会帮我们下载最新的包。当别人引用我们这个包的时候,包内的依赖包也会被下载下来。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

创业时代

创业时代

付遥 / 中信出版社 / 2015-7 / 39.8元

香港人郭鑫年酷爱赛车,在驾车穿越隧道的时候,因为收发短信发生意外,他从被撞得破烂的车里爬出来时,兴奋地高喊:我有一个伟大的想法,手机上的对讲机,将要改变世界!他随即辞职来到北京,开始艰难的创业历程。 移动技术迅猛发展,正在颠覆互联网行业,郭鑫年误打误撞,对讲机用户数量急增,竟成为移动互联网的明星,他也因此置身于风口浪尖。三大互联网巨头为了抢夺手机入口大打出手,无不希望争夺这张通往未来移动市场......一起来看看 《创业时代》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

html转js在线工具
html转js在线工具

html转js在线工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试