70场面试,复盘我遇到的有趣问题(六)

        这一期把京东二面剩下的问题复盘一下,主要是针对构建项目中的各文件的作用。考察的点很细很细,工程化根本不需要问多复杂的原理,问这些答不上来就能知道你水平如何了,我答得特别烂,但是学习了很多东西。
1.package.json文件中的script部分是干嘛的,scrpit中有个dev指令,后面配置了vite,这个vite哪里来的,如何运行起来的?
        这个问题想回答好首先要知道package.json文件是干嘛的,里面的scrpit应该大部分同学都知道,但是vite从哪里来可能是大部分人没想过的问题。
        关于package.json:在每个前端项目中,都有 package.json 文件,它是项目的配置文件,常见的配置有配置项目启动、打包命令,声明依赖包等。当我们克隆一个新的项目到本地时,需要执行 npm install(yarn install)命令来安装项目所需的依赖文件。当执行该命令时,就会根据 package.json 文件中的配置信息来自动下载所需的模块,也就是配置项目所需的运行和开发环境。package.json 中最重要的两个字段就是 name 和 version,它们都是必须的,如果没有,就无法正常执行 npm install 命令。npm 规定 package.json 文件是由名称和版本号作为唯一标识符的。
        scrpits部分就是配置了我们常用的开发、打包等指令的,如我们常见的npm run dev和npm run build为什么能够运行或打包项目就是在这里进行了配置
        那么vite是如何被找到的?我当时的第一反应是下面配置的devDependencies中有vite,这当然有关系,但是这只是配置了vite作为开发过程中的依赖,而真正能够让他被使用的包则是在node_modules中。我的理解是,当我们安装或者新建一个项目时,开发所用的devDependencies将vite作为我们开发时的依赖,通过这个配置让我们的程序关联上node——modules中的vite工具,再通过scripts中的指令调用。
2.devdependencies和dependencies的区别,如果这两块的东西都写到devdependencies或dependencies里面有什么区别?
        通过名字大部分同学都知道devDependencies配置的是开发环境所用的依赖,dependencies配置的是生产环境中的依赖。
        他俩的详细作用如下:
        dependencies 字段中声明的是项目的生产环境中所必须的依赖包。devDependencies 中声明的是开发阶段需要的依赖包,如 Webpack、Eslint、Babel 等,用于辅助开发。它们不同于 dependencies,因为它们只需安装在开发设备上,而无需在生产环境中运行代码。当打包上线时并不需要这些包,所以可以把这些依赖添加到 devDependencies 中,这些依赖依然会在本地指定 npm install 时被安装和管理,但是不会被安装到生产环境中。
        那么如果这两块的东西都写到devdependencies或dependencies里面会影响什么?如果你的项目会被发为npm包被使用,那么devdependencies,dependencies必须分开写;如果并不发布,那么声明在dependencies 和 devDependencies 中的依赖没有大的区别。
        如果安装一个npm包,那么这个包的dependencies意思是在运行时还需要依赖什么其他的包才能满足你的运行要求。安装的时候会安装这个包的dependencies,并且是向上递归的(可以看图2网友的解释)。
3.编译完的dist和node_modules有啥关系吗,部署的是dist,node_modules会部署吗?
        在构建项目的过程中(将源代码转换为 dist 中的可分发文件时),构建工具可能会读取 node_modules 中的包。例如,在使用 Webpack 构建一个包含 React 应用的项目时,Webpack 会从 node_modules 中找到 react 和 react - dom 等相关包,然后根据项目的配置将这些包中的必要代码与项目的源代码一起进行处理,最终生成的优化后的文件存放到 dist 中。
        在开发过程中,开发者会在 node_modules 中安装各种开发依赖和生产依赖。当项目准备部署时,构建过程会将这些依赖的相关部分(根据代码的引用情况)正确地整合到 dist 中的文件里,从而确保项目在生产环境中能够正常运行,生产环境中不需要直接访问 node_modules 文件夹。
        项目最终在 dist 中的可分发文件可能依赖于 node_modules 中的包所提供的功能。比如一个基于 Vue.js 构建的项目,node_modules 中的 vue 包提供了 Vue 框架的核心功能,构建工具会将这些功能整合到 dist 中的 JavaScript 文件里,使得浏览器在加载 dist 中的文件时能够正常运行 Vue 应用。
4.pnpm-lock是什么
        pnpm-lock.yaml 是 pnpm 包管理器生成的锁定文件。它类似于 npm 的 package-lock.json 或 yarn 的 yarn.lock 文件,用于记录项目的依赖关系和确保在不同环境中安装相同的包版本。
        当你使用 pnpm 安装依赖时,它会自动生成 pnpm-lock.yaml 文件。这个文件包含了项目的依赖关系树,以及每个包的版本信息和依赖项的精确版本范围。这样,当你在不同的环境中重新安装依赖时,pnpm 会根据 pnpm-lock.yaml 文件来确保安装相同的包版本,以保持项目的一致性。

该系列往期链接:
第一期:https://www.nowcoder.com/feed/main/detail/a79cb52ce00c4f6d874683e65b8eb718?sourceSSR=users
第二期:https://www.nowcoder.com/feed/main/detail/04aee48cc23f4b09a04d0dba327f0c5d?sourceSSR=users
第三期:https://www.nowcoder.com/feed/main/detail/0195906f12dd4fc0826251e9ceee19ab?sourceSSR=users
第四期:https://www.nowcoder.com/feed/main/detail/2c0a525fa04240778e6c43d7d355a7ca?sourceSSR=users
第五期:https://www.nowcoder.com/discuss/673869939018588160?sourceSSR=users

京东二面面经:https://www.nowcoder.com/feed/main/detail/18cb2c4275544c79af169aa92d2c3fd1?sourceSSR=users
#牛客在线求职答疑中心##我的求职思考##京东##软件开发2024笔面经##前端#
全部评论
“如果并不发布,那么声明在dependencies 和 devDependencies 中的依赖没有大的区别。” 这个不对吧?即使不发布为npm包,我们写的也可能是会被访问的页面,如果一股脑全部写到dependencies,打包时候会有冗余代码,用户加载的时候也会加载冗余代码,加载变慢、浪费带宽
点赞 回复 分享
发布于 10-14 18:58 江苏

相关推荐

当在浏览器中输入网址并按下回车键时,以下是大致的执行过程:https://www.nowcoder.com/issue/tutorial?zhuanlanId=Mg58Em&uuid=02b1742be4564f04b7e1bdf3b39333d7DNS解析:浏览器首先将输入的网址发送给DNS服务器,以获取该网址对应的IP地址。DNS服务器会查询其数据库,在找到匹配的域名时返回对应的IP地址给浏览器。TCP连接建立:浏览器使用获取到的IP地址与服务器建立TCP连接。这涉及到使用TCP三次握手的过程,确保客户端与服务器之间的可靠连接。发起HTTP请求:一旦建立了TCP连接,浏览器会发送HTTP请求到服务器。请求包含请求方法(例如GET、POST)、请求的URL、HTTP版本以及其他可能的请求头信息,如用户代理、Cookie等。服务器处理请求:服务器收到HTTP请求后,会根据请求的URL和其他请求信息来处理请求。服务器可能会读取请求中的参数,查询数据库,执行相应的逻辑处理,并生成HTTP响应。HTTP响应:服务器生成完整的HTTP响应后,将其返回给浏览器。响应包括一个状态码表示请求的结果(例如200表示成功,404表示资源未找到等),响应的内容,以及其他响应头信息,如Content-Type、Content-Length等。接收和解析响应:浏览器接收到服务器的HTTP响应后,开始解析响应。它会检查状态码,根据响应头中的Content-Type确定响应内容的类型,并将响应的内容保存下来。渲染页面:如果响应的内容是HTML页面,浏览器会开始解析HTML,并构建DOM树。然后,将CSS文件加载和解析为样式规则,并将其应用于DOM树,生成渲染树。最后,浏览器使用渲染树将页面内容绘制到用户的屏幕上。关闭TCP连接:一旦页面完全加载并渲染完成,浏览器会关闭与服务器之间的TCP连接。但是,如果页面中存在其他的资源(如图片、脚本、样式表等),浏览器可能会继续发送HTTP请求获取这些资源。
点赞 评论 收藏
分享
6 12 评论
分享
牛客网
牛客企业服务