2024年前端最新Nodejs基础之包管理工具npm(二)(2),微软面试题及答案

最后

我可以将最近整理的前端面试题分享出来,其中包含HTML、CSS、JavaScript、服务端与网络、Vue、浏览器、数据结构与算法等等,还在持续整理更新中,希望大家都能找到心仪的工作。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

篇幅有限,仅展示部分截图:

“version”: “1.0.0”,

“description”: “”,

“main”: “index.js”,

“scripts”: {

“test”: “echo “Error: no test specified” && exit 1”

},

“keywords”: [],

“author”: “”,

“license”: “ISC”,

“dependencies”: {

“md5”: “^2.3.0”

},

“devDependencies”: {

}

}

  • dependencies -> 配置当前程序所依赖的其他包

  • devDependencie -> 配置当前程序所依赖的其他包,比如一些工具之类的配置在这里

在这里插入图片描述

dependencies 与 devDependencies 之间的区别?

  • 使用 npm install node_module --save 会自动更新 dependencies 字段值

  • 使用 npm install node_module --save -dev 会自动更新 devDependencies 字段值

1.1、package.json


  • package.json 是项目描述文件,记录了当前项目信息,例如项目名称、版本、作者、github地址、当前项目依赖了哪些第三方模块等。

  • 锁定包的版本,确保再次下载时不会因为包版本不同而产生问题

  • 加快下载速度,因为该文件中已经记录了项目所依赖第三方包的树状结构和包的下载地址,重新安装时只需下载即可,不需要做额外的工作

  • 每次创建新项目,记得先 npm init 生成package.json

1.2、package.json常见属性


必须填写的属性:name、version

  • name 是项目的名称

  • version 是当前项目的版本号

  • description是描述信息,很多时候是作为项目的基本描述

  • author是作者相关信息(发布时用到)

  • license是开源协议(发布时用到)

private 属性

  • private属性记录当前的项目是否是私有的

  • 当值为true时,npm是不能发布它的,这是防止私有项目或模块发布出去的方式

main 属性

  • 设置程序的入口。

scripts 属性

  • scripts 属性用于配置一些脚本命令,以键值对的形式存在

  • 配置后我们可以通过 npm run 命令的key来执行这个命令

  • npm start和npm run start的区别是什么?

  • 它们是等价的

  • 对于常用的start、test、stop、restart可以省略掉run直接通过npm start等方式运行

dependencies 属性:项目依赖

  • dependencies 属性是指定无论开发环境还是生成环境都需要依赖的包

  • 使用npm install 包名命令下载的文件会默认被添加到 package.json 文件的 dependencies 字段中

  • 与之对应的是devDependencies

devDependencies 属性:开发依赖

  • 一些包在生成环境是不需要的,比如webpack、babel等

  • 这个时候我们会通过npm install webpack --save-dev,将它安装到devDependencies属性中

  • 那么在生成环境如何保证不安装这些包呢?

  • 生成环境不需要安装时,我们需要通过npm install --production 来安装文件的依赖

1.3、版本管理的问题


我们会发现安装的依赖版本出现:^2.0.3或~2.0.3,这是什么意思呢?

我们这里解释一下^和~的区别:

  • ^x.y.z:表示x是保持不变的,y和z永远安装最新的版本

  • ~x.y.z:表示x和y保持不变的,z永远安装最新的版本

1.4、npm install 命令


安装npm包分两种情况:

  • 全局安装(global install): npm install ModuleName -g

  • 项目(局部)安装(local install): npm install

全局安装:

  • 全局安装是直接将某个包安装到全局

但是很多人对全局安装有一些误会:

  • 通常使用npm全局安装的包都是一些工具包:yarn、webpack等

  • 并不是类似于axios、express、koa等库文件

  • 所以全局安装了之后并不能让我们在所有的项目中使用axios等库


  1. npm -v 查看 npm 版本

  2. 使用 npm 命令安装模块 npm install ModuleName

我们推荐安装模块后面加上 --save,这样可以安装模块并把模块写入 package.json

// 如安装 jq 模块

npm install jquery --save

  1. 卸载模块 npm uninstall moduleName

  2. 查看当前目录下已安装的 node 包 npm list

  3. 查看 模块 的版本 npm info 模块

// 如查看 jquery 的版本

npm info 模块

  1. 指定版本安装 npm install jquery@1.8.0 --save 🔥

1.5、项目安装


项目安装会在当前目录下生产一个node_modules 文件夹

局部安装分为开发时依赖和生产时依赖

在这里插入图片描述

1.6、npm install 原理


执行npm install它背后帮助我们完成了什么操作?

我们会发现还有一个成为package-lock.json的文件,它的作用是什么?

从npm5开始,npm支持缓存策略(来自yarn的压力),缓存有什么作用呢?

在这里插入图片描述

npm install会检测是有package-lock.json文件:

  • 没有lock文件

  • 分析依赖关系,这是因为我们可能包会依赖其他的包,并且多个包之间会产生相同依赖的情况

  • 从registry仓库中下载压缩包(如果我们设置了镜像,那么会从镜像服务器下载压缩包)

  • 获取到压缩包后会对压缩包进行缓存(从npm5开始有的)

  • 将压缩包解压到项目的node_modules文件夹中

  • 有lock文件

  • 检测lock中包的版本是否和package.json中一致

  • 不一致,那么会重新构建依赖关系,直接会走顶层的流程

  • 一致的情况下,会去优先查找缓存

  • 没有找到,会从registry仓库下载,直接走顶层流程

  • 查找到,会获取缓存中的压缩文件,并且将压缩文件解压到node_modules文件夹中

1.7、package-lock.json


package-lock.json文件解析:

  • name:项目的名称

  • version:项目的版本

  • lockfileVersion:lock文件的版本

  • requires:使用requires来跟着模块的依赖关系

  • dependencies:项目的依赖

1.8、npm其他命令


总结

我在成长过程中也是一路摸爬滚打,没有任何人的指点,所以走的很艰难。例如在大三的时候,如果有个学长可以阶段性的指点一二,如果有已经工作的师兄可以告诉我工作上需要什么,我应该前面的三年可以缩短一半;后来去面试bat,失败了有5、6次,每次也不知道具体是什么原因,都是靠面试回忆去猜测可能是哪方面的问题,回来学习和完善,当你真正去招人的时候,你就会知道面试记录是多么重要,面试官可以从面试记录里看到你的成长,总是去面试,总是没有成长,就会被定义为缺乏潜力。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

image
image

点,所以走的很艰难。例如在大三的时候,如果有个学长可以阶段性的指点一二,如果有已经工作的师兄可以告诉我工作上需要什么,我应该前面的三年可以缩短一半;后来去面试bat,失败了有5、6次,每次也不知道具体是什么原因,都是靠面试回忆去猜测可能是哪方面的问题,回来学习和完善,当你真正去招人的时候,你就会知道面试记录是多么重要,面试官可以从面试记录里看到你的成长,总是去面试,总是没有成长,就会被定义为缺乏潜力。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

[外链图片转存中…(img-GVn4NAkb-1715584021800)]
[外链图片转存中…(img-9Cu53PHJ-1715584021801)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值