尧图精选

Node.js | 从前端到全栈的必经之路

🕒 发布时间:2026/9/15 22:57:59 📁 来源:尧图网络
‍ 个人简介即将大三的学生一个不甘平庸的平凡人️ NodeJS专栏Node.js从入门到精通️ 博主的前端之路前端之行任重道远来自大三学长的万字自述️ TypeScript知识总结TypeScript从入门到精通十万字超详细知识点总结 你的一键三连是我更新的最大动力❤️博主推荐前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家。点击跳转到网站文章目录前言一、什么是NodeNode.js的由来Node.js的特性二、浏览器环境与Node环境对比三、Node 能干什么四、搭建Node环境五、体验Node模块化开发CommonJS方式ES Modules方式结语前言对于前端开发的朋友们是否有这样的烦恼或需求想要开发一个心仪的项目但没有后端朋友的合作而只能使用mock与后端合作开发中总感觉约束不能很好的交流所想从而拖慢进度不甘心自己只能和他人合作开发想要自己独立实现效果想提高自己的地位丰富自己的知识面从而能够在团队中独当一面习惯了个人开发自由惯了不想随波逐流服从安排等等当你有这些问题时就该是时候问问自己是不是想要发展为全栈如果是那么学习Node.js就该是你进击全栈的必经之路博主的Node系列专栏开始更新了赶快点击订阅专栏来追更吧一、什么是NodeNode.js是一个javascript运行环境它让javascript可以开发后端程序实现几乎其他后端语言实现的所有功能这意味着我们只需要掌握javaScript一门语言就能够进行全栈开发学习Node我们可以非常平滑的过渡到全栈开发并且如果你之前学习过VueReact等前端框架或者Webpack这些那么其实你就已经接触过Node了因为它们都是建立于Node基础上的如Vue、React的脚手架Vue-clicreate-react-appvite等这也就是为什么使用这些框架时需要安装Node环境对于前端开发经常用的npm它是NodeJS包管理和分发工具其实就相当于是Node的开源仓库并且是全球最大的开源仓库我们可以使用npm指令去下载这个仓库里的指定项目进行使用如运行npm i axios下载这个仓库里的axios当然我们也可以开发自己的插件项目通过npm指令上传到这个仓库里Node.js的由来Node.js基于V8引擎而V8其实是Google发布的开源JavaScript引擎本身是用于Chrome浏览器的js解释部分但是总有大佬不按套路出牌Node之父Ryan Dahl就把这个V8搬到了服务器上用于做服务器的软件Node.js发布于2009年5月经过十几年的发展它已经成为前端中顶梁柱的存在就算你不需要它进行服务端开发它也存在于你开发过程中的方方面面如前面提到的VueReactWebpackNode.js的特性Node.js贯穿于客户端如Vue这类框架的底层依赖和服务端如后端开发Node.js的语法完全就是javascript和ES6的语法Node.js是单线程非阻塞的具有超强的高并发能力能够实现高性能服务器开发周期短、开发成本低、学习成本低单线程非阻塞模型具有强大的高并发能力主要由以下几个原因资源利用率高单线程模型不需要为每个请求创建一个新的线程或进程从而节省了大量的系统资源。相比多线程模型单线程模型的资源开销更小可以更好地利用服务器的硬件资源。没有线程切换开销在多线程模型中当一个线程被阻塞等待 I/O 完成时操作系统需要执行线程切换这会产生一定的开销。而在单线程非阻塞模型下当一个 I/O 操作发起时线程不会被阻塞而是继续执行下一个请求等待 I/O 操作完成后再处理结果。这样避免了线程切换的开销提高了系统的响应速度和并发处理能力。事件驱动和异步编程单线程非阻塞模型基于事件驱动和异步编程的思想。它通过监听和触发事件来处理请求和响应利用回调函数来处理异步操作。这种模型使得代码可以以非阻塞的方式运行当一个请求需要执行耗时的 I/O 操作时可以立即处理下一个请求而不需要等待。这样可以充分利用 CPU 和内存资源提高系统的并发处理能力。需要注意的是单线程非阻塞模型适合处理 I/O 密集型的应用场景但对于 CPU 密集型任务由于单线程的特点可能会导致性能瓶颈。在这种情况下可以通过使用多进程、多线程或集群模式来提高性能。单论后端开发Node.js作为JavaScript的运行环境的性能虽不能与Java这类编译语言相比但正因为它的诸多特性使它能够发展如此之快并受到越来越多人青睐看到这里你可能已经明白为什么我会说Node是前端到全栈的必经之路因为它是一扇门是用前端人员最熟悉的 JS 搭建起来的通往广阔后端的门。二、浏览器环境与Node环境对比看图图画的不好凑合着看操作系统包括网卡/硬盘/本地文件等等一般是windows或max或linux等等从图上看好像Node环境就只是浏览器环境的一部分但其实不然在浏览器环境中我们很难触控到操作系统那一层这是因为具有浏览器安全级别的限制不限制的话浏览器上的网页就能直接操控操作系统这还能了得Node.js作为JavaScript的服务端运行环境它可以解析JavaScript代码没有浏览器安全级别的限制并能够为其提供很多系统级别的API如系统文件的读写fs系统进程的管理process网络通信 (HTTP/HTTPS)等等Node提供了完整的控制计算机的能力NodeJS几乎可以通过Node提供的接口实现对整个操作系统的控制这些将在之后的文章中一一讲解赶快订阅Node.js从入门到精通专栏追更吧另外浏览器环境和Node环境中的JavaScript也是有一些区别的浏览器中的JavaScript ECMAScript Web Api 指DOM Api 与 BOM ApiNode 中的 JavaScript ECMAScript Node Api所以在Node.js中我们无法使用浏览器提供的API如window对象更不能操作DOM元素。三、Node 能干什么Node 专注后端领域所以它可以像其它后端语言一样编写桌面应用程序和开发服务器应用程序。对于 Node 开发的桌面应用程序我们最熟悉的就是 VS Code对没错就是 VS CodeVS Code 是使用 Electron 和 React 进行开发的而 Electron 正是一个基于 Chromium 和 Node.js 的框架。相比桌面应用程序我们使用 Node 最多的领域其实是服务器开发在这里 Node 又分为了两种应用像其它后端语言一样完全使用 Node 从0到1 开发服务器在其它后端服务器的基础上使用 Node 搭建一个中间层服务器应用Node服务器不做任何与业务逻辑有关的事情这种情况最为常见比如在使用 VueReact 等框架的脚手架进行开发时用到的 proxy 请求代理转发就是 Webpack或者 Vite基于 Node 来实现的。将 Node 作为中间层还可以实现一些额外的功能请求日志记录静态资源托管缓存等等四、搭建Node环境如果你曾使用过npm或者前端框架相信你已经搭建好了Node的环境这里对没有搭建过的朋友们再次演示一下打开Node官网https://nodejs.org/zh-cn/推荐下载这个长期维护的稳定版本下载完成后一路Next安装即可之后在任意位置终端运行node -v出现版本号了就代表我们已经安装成功了我这里安装的比较久了所以版本号会比较老不影响使用五、体验Node模块化开发在一个文件夹内随便建两个js文件如下因为Node的语法就是JavaScript的语法所以使用Node进行模块化开发的方式依旧是使用CommonJS或ES Modules这里直接就进行演示不再细说。因为 ES Modules 是在 ES6 时诞生的而 Node 是在 ES6 之前诞生的所以一开始 Node 就是基于 CommonJS 来进行设计的在 ES6 推出之后ES Modules 成为了模块化的标准Node 在18年才开始支持 ES Modules。ES6诞生前Node 已经有了非常多的 npm 包这些包也都是基于 CommonJS 设计的所以现如今在 Node 中 CommonJS 依然广为使用并推荐使用。CommonJS方式CommonJS 是 Node 社区规范并不是官方标准CommonJS 本质上是将文件代码包装进一个函数内运行以此来实现各文件模块的独立Node默认是CommonJS方式// index.jsconstnameAiljx;// 导出方法一module.exports直接导出// 直接对module.exports赋值时main.js中导入的就是这个赋值// 多个module.exports赋值时只生效最后一个即最后一个会替代前面的module.exportsname;使用require函数导入在文件夹终端运行node js文件路径命令就能使用node来运行指定的js文件console.log打印结果在终端进行显示每次修改main.js文件后需要重新运行命令node .\main.js执行main.js文件这显然不太方便我们可以安装nodemon这个插件来帮我们自动运行npmi nodemon-g之后使用nodemon运行main.jsnodemon .\main.js其它的导出语法// index.jsconstnameAiljx;// 导出方法一module.exports直接导出// 直接对module.exports赋值时main.js中导入的就是这个赋值// 多个module.exports赋值时只生效最后一个即最后一个会替代前面的module.exportsname;// 导出方法二module.exports导出对象// main.js里n接受的是一个对象{ NNNN: Ailjx }module.exports{NNNN:name,// 顺便起个别名// 可以继续导出其它内容};// 导出方法三exports.key值内容// main.js里n接受的是一个对象{ Myname: Ailjx, Myname2: Ailjx }// 使用多个 exports.key值内容 时最终会合并成一个大对象相同key值的会覆盖而不是像多个module.exports赋值时只生效最后一个// exports.key值与module.exports一起使用时会被module.exports替代exports.Mynamename;exports.Myname2name;// 导出方法四exports.key值对象// main.js里n接受的是一个对象{ Myname: { A: Ailjx } }exports.Myname{A:name,// 顺便起个别名// 导出其它内容};CommonJS 本质上是将文件代码包装进一个函数内运行文件内能使用的全局变量 exports 、module 其实就是这个函数的形参其中 exports 接收的实参就是 module.exports 并且这个函数运行时 this 也指向 module.exports 。所以默认情况下文件中的 this 、exports、module.exports 指向的都是同一个对象但在使用 require 导入时导入的始终是 module.exports 如果你手动改变了 module.exports 的值this 和 exports 就失去了与它的关联这时就无法通过这俩导出了上边看不懂没关系作为 Node 学习的开篇这里先简单了解下就行在之后的文章中会对其作更详细的讲解。ES Modules方式因为node默认是使用CommonJS规范所以我们在使用ES Modules时需要进行配置一下先在文件夹下运行npm init生成package.json文件运行npm init后会一个个的让你输入信息按照上图提示填即可最后生成的package.json文件如下{name:node,version:1.0.0,description:node学习,main:main.js,scripts:{test:echo \Error: no test specified\ exit 1},author:Ailjx,license:MIT}我们在package.json中加上一行type: module,即可切换使用ES Modules方式这时就不能再使用CommonJS方式了二选一如果我们一个项目中需要同时使用 CommonJS 和 ES Modules那么我们可以放弃上面的那种方式转而使用更推荐的一种方式即对文件后缀名做手脚后缀名为.mjs的支持 ES Modules指定type: module时.js文件默认使用 ES Modules后缀名为.cjs的支持 CommonJS 未指定type: module时.js文件默认使用 CommonJS不太建议使用ES Modules因为npm仓库里的包大多遵循的是CommonJS规范如果你使用ES Modules去下载这些包时很可能会出现不兼容语法constnameAiljx;// 接口暴露方法一export default默认导出// 一个文件只能有一个export default// main.js使用import n from ./index.js;进行导入n自己随便起名它的值为Ailjx// export default name;// 接口暴露方法二export导出对象// main.js使用import { MyName } from ./index.js;进行导入export{nameasMyName,// 顺便使用as改个别名// 导出其它成员};// export default 可以和 export导出对象 一起使用一起使用时// main.js使用import n, { MyName } from ./index.js;进行导入n和MyName的值都为Ailjx当在 Node 中混用 CommonJS 和 ES Modules 时会有一些奇怪的现象ESM 能导入 CJS 的导出并且无论 CJS 如何导出ESM 内的导入时都是作为 default 直接导入// a.cjs 使用的是CommonJSexports.a1;exports.b2;// index.mjs 使用的是 ES Modulesimportafrom./a.cjs;// import { a, b } from ./b.cjs; // 不能使用具名导入只能使用上面的默认导入console.log(a);// { a: 1, b: 2 }CJS 无论如何都不能导入 ESM 的导出结语只学习Node并不能让你真正的发展为全栈大佬学习Node只是让前端人员能够非常快非常丝滑的学习后端思维了解后端开发模式从而顺利过渡到全栈为之后的学习发展奠定基础如果想要成为真正的全栈大佬像Java这类的编译语言以及一些其它方面的技术肯定还是要学习的这篇文章主要介绍了一下什么是Node以及Node环境的配置之后我们就将开始深入去学习Node了关注博主订阅专栏学习Node不迷路Node系列专栏开始更新了赶快点击订阅专栏来追更吧如果本篇文章对你有所帮助还请客官一件四连❤️
上一篇/下一篇内容由系统自动关联 返回资讯列表 →