包管理工具

模块(module):通常以单个文件形式存在的功能片段,入口文件通常称之为入口模块或主模块

库(library,简称lib):以一个或多个模块组成的完整功能块,为开发中某一方面的问题提供完善的解决方案(例如jquery这个库是为了解决获取dom对象难的问题;mockjs是模拟数据进行测试的)

包(package):是一个或多个js模块的集合,包含元数据的库,这些元数据包括:名称、描述、git主页、许可证协议、作者、依赖等(有的包是给别人用的,这种包称之为第三方库)

包管理工具:

1、让开发者可以轻松的下载包

2、让开发者可以轻松的升级和卸载包

3、能够自动管理包的依赖

package = meta data (元数据) + lib(lib = module1 + module2)

npm:重点

(前端所有的包管理器都是基于npm的,目前,npm既是一个包管理器,也是其他包管理的基石)

npm全称为node package manager ,即node包管理工具,它运行在node 环境中,让开发者可以用简单的方式完成包的查找、安装、更新、卸载、上传等操作

npm由三部分组成:

1、registry入口(npm的数据库;第三方库的开发者,将自己的库按照npm的规范,打包上传到数据库中,使用者通过统一的地址下载第三方包)

2、官网(查询包;注册、登录、管理个人信息)

3、CLI:command-line interface 命令行接口(通过CLI来使用npm的各种功能)

CLI:

1、查看npm的版本:

npm -v(一个横杠和一个单词是简写)

或者npm --version(两个横杠是全称)

2、由于npm官方的registry服务器在国外,下载包比较慢,因为需要重新设置registry的地址为国内地址(淘宝提供的国内地址),命令设置方式:

设置源

npm config set registry https://registry.npm.taobao.org

设置好之后,通过命令检查:

查看源

npm config get registry

工程初始化:

npm init (工程初始化,帮助生成package.json文件)

使用npm init --yes 或 npm init -y 可以在生成配置文件时自动填充默认配置

3、安装

本地安装:npm install 包名

或npm i 包名

同时下载多个包:npm i 包名 包名

精确安装最新版本:

npm install --save-exact 包名 或

npm install -E 包名

安装指定版本:

npm install 包名@版本号

1)本地安装的包只会影响当前目录及其子目录,出现在当前目录下的node_modules目录中

2)由于包文件较多,可以新建一个 .gitignore文件,在里面写上node_modules文件名去进行忽略,这样上传的时候就不会上传到gjt仓库里面

3)安装包的时候,如果安装的包有别的依赖,npm会自动安装这个包所依赖的包(依赖树)

4)如果本地安装的包带有CLI,npm会将它的CLI脚本文件放置到node_modules/.bin下,使用命令 npx 命令名 即可调用

(本地安装通常安装在工程的根目录中,只会让本机使用,不会传到服务器中)

全局安装(通常为了安装全局需要使用的CLI命令)

npm install --global 包名

或 npm i -g 包名

全局安装的包放置在一个特殊的全局目录,该目录可以通过命令

npm config get prefix查看

重要:全局安装的包并非所有工程可用,它仅提供全局的CLI工具

大部分情况下,都不需要全局安装包,除非:

1)包的版本非常稳定,很少有大的更新

2)提供的CLI工具在各个工程中使用的非常频繁

3)CLI工具仅为开发环境提供支持,而非部署环境

4、包配置

(还原拷贝工程、区分开发依赖和生产依赖、描述包信息)

配置文件:npm将每个使用npm的工程本身都看作是一个包,包的信息需要通过一个名称固定的配置文件来描述:package.json(可以手动创建该文件,而更多的时候,是通过命令npm init创建的)

创建配置文件包括:

1)name包的名称:该名称必须是英文单词字符,支持连接符

2)version版本:

版本规范:主版本号.次版本号.补丁版本号

主版本号:仅当程序发生了重大变化时才会增长,如新增了重要功能、新增了大量的API、技术架构发生了重大变化

次版本号:仅当程序发生了小的变化时才会增长,如新增了一些小功能,新增了一些辅助API

补丁版本号:仅当解决了一些BUG或进行了一些局部优化时更新,如修复了某个函数的bug,提升了某个函数的运行效率

语义化版本号:

1.3.X:主要版本主版本是1,次版本是3,补丁版本无要求

~1.3.4:保证主版本号是1,次版本是3,补丁版本号大于等于4

^1.3.4:保证主版本号是1,次版本大于等于3,补丁版本大于等于4

*最新版本

3)description包的描述

4)homepage官网地址

5)author包的作者,必须是有效的npm账户名,书写规范是account <mail>,例如zhangsan<zhangsan@mail.com>,不正确的账号和邮箱可能导致发布包时失败

6)repository:包的仓储地址,通常指git或svn的地址,它是一个对象:type(仓储类型,git或svn)、url(地址)

7)entry point(main):包的入口文件,使用包的人默认从该入口文件导入包的内容

8)keywords:搜索关键词,发布包之后,可以通过该数组中的关键字搜索到包

9)test command 测试命令

使用npm init --yes 或 npm init -y 可以在生成配置文件时自动填充默认配置

package.json文件最重要的作用,是记录当前工程的依赖:

dependencies :生产环境的依赖包

devDependencies:仅开发环境的依赖包

配置好依赖后,使用下面的命令即可安装依赖:

1)本地安装所有依赖:dependencies +devDependencies :

npm install或 npm i

2)仅安装生产环境的依赖 dependencies

npm install --production

为了更加方便的添加依赖,建议拿到项目之后先新建一个package.json,然后下载包的时候加入一些参数,系统会自动写入到package.json文件中,涉及的命令:

1)安装依赖到生产环境:

npm i 包名

npm i --save 包名

npm i -S 包名

2)安装依赖到开发环境(常用)

npm i --save-dev 包名

npm i -D 包名

npm install -D 包名@版本号

还原安装:

npm i

npm i --production(仅还原dependencies的依赖)

5、包使用

当使用node.js导入模块时,如果模块路径不是以./或../开头,则node会认为导入的模块来自于node_modules目录,如果当前目录没有这样的文件,则会回溯到上级目录按照同样的方式查找,如果到顶级目录都无法找到文件,则抛出错误(先看有没有这样命名的文件,如果没有文件,再看有没有这样命名的文件夹;如果有一些特殊的字符,是nodejs自带的内置模块,优先识别内置模块)

node找包顺序:

require("a")

1、查找是否有内置模块a

2、查找当前目录的node_modules中是否有a

3、依次查找上级目录的node_modules是否包含a,直到根目录

上面提到的入口文件按照一下规则确定:

1)查看导入包的package.json文件,读取main字段作为入口文件

2)若不包含main字段,则使用index.js作为入口文件

package-lock.json文件:由于依赖包情况比较复杂,所以在npm安装包的时候,会自动生成一个package-lock.json的文件,该文件记录了安装包时确切的依赖关系;当移植工程时,如果移植了package-lock.json文件,恢复安装的时候,会按照这个文件中的确切依赖进行安装,最大限度的避免了差异

npm脚本(npm script)常用的CLI语言只需要在package.json中配置script字段,可以配置各种脚本名称 ;之后我们可以直接运行 ,运行方式:npm run 脚本名称

下面的脚本名称不需要使用run:

start stop test

脚本中可以省略npx

start脚本中有默认值:node server.js

运行环境:

node.global.process属性是一个对象,里面包含了当前运行node程序的计算机的很多信息,其中有一个信息是env,是一个对象,包含了计算机的所有系统变量;

通常,我们通过系统变量NODE_ENV的值,来判断node程序处于何种环境

有两种方式设置:

永久设置:在计算机的环境变量里面添加设置(不建议)

临时设置:在scripts里面的start前面加上一句:set NODE_ENV=development&&node index.js

我们一般使用临时设置,因此,我们可以配置scripts脚本,在设置好了NODE_ENV后启动程序,为了避免不同系统的设置方式差异,我们可以使用第三方库cross-env对环境变量进行设置

像提供命令行的东西一般都是开发环境的依赖

在node中读取package.json文件,可以直接导入一个json内容的文件,它会自动将其转换为js对象

6、npm其他命令:

1)查询

查询包安装路径:npm root [-g](中括号中参数是可选的)

查看包信息:npm view 包名【子信息】

(view可以替换为v 、info 、show)

查询安装包:

npm list [-g][--depth=依赖深度]

(list可替换为:ls、la、ll)

2)更新

检查哪些包需要更新:npm outdated

更新包:npm update [-g][包名]

(update 可替换为up、upgrade)

3)卸载:

npm uninstall [-g][包名]

(uninstall可替换为remove、rm、r、un、unlink)

4)查看配置

查询目前生效的配置:npm config ls [-l][--json]

获取某个配置项:npm config get 配置项

设置某个配置项:

npm config set 配置项=值

移除某个配置项:npm config delete 配置项

yarn:次重点

安装yarn:npm install -g yarn

yarn的核心命令

1)初始化:yarn init[-y]

2)安装:添加指定包

yarn[global] add package-name [-D][-E]

安装package.json中的所有依赖:

yarn install [--production]

3)脚本和本地CLI

运行脚本:yarn run 脚本名

运行本地安装的CLI:yarn run CLI名

4)查询:

查看bin目录:yarn [global] bin

查询包信息:yarn info 包名【子字段】

列举已安装的依赖:yarn [global] list [--depth=依赖深度]

5)更新:

列举需要更新的包:yarn outdated

更新包:yarn [global] upgrade [包名]

6)卸载:yarn remove 包名

7)yarn check 使用yarn check命令,可以验证package.json文件的依赖记录和lock文件是否一致(这对于防篡改非常有用)

8)yarn audit 使用yarn audit命令,可以检查本地安装的包有哪些已知漏洞,以表格的形式列出,漏洞级别分为以下几种:

INFO:信息级别

LOW:低级别

MODERATE:中级别

HIGH:高级别
CRITICAL:关键级别

9)yarn why 包名 :可以在控制台打印出为什么安装了这个包,哪些包会用到它

10)yarn create :安装脚手架和搭建

其他:了解

cnpm

淘宝提供的,和npm相似的,只有下载地址为淘宝的镜像源,现在npm支持修改镜像源地址,就不再用了

nvm

切换node版本的工具(在终端直接输入nvm就能看见常用的命令)

nrm

切换npm版本的工具

pnpm

安装pnpm:npm i -g pnpm

命令和npm差不多,另外下载会有缓存,node_modules目录比较简洁且不能间接使用依赖

bower

解决浏览器环境,已经被webpack完全替代

开发流程练习

1、创建一个工程

2、使用git初始化

3、使用npm初始化

4、添加.gitignore文件:

node_modules...

5、git提交

6、关联并推送到gitee

7、新建index.js

8、设置package.json的script中脚本start,用于运行index.js命令

9、写代码

10、开发完成,提交,推送到gitee

11、删除本地工程

12、从gitee拉取工程(git clone 地址)

13、还原依赖(npm i)

14、重新运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值