前端学习之旅(五) node.js

node.je(上)

一、技术角色和定位

1. Vue 3

  • 定位:Vue 3 是一款用于构建用户界面的前端框架,负责在浏览器端呈现和处理用户交互。
  • 作用:通过组件化和响应式的数据绑定,构建灵活、动态的前端应用。

2. Java Spring Boot

  • 定位:Spring Boot 是基于 Spring 框架的快速开发工具,提供了简化配置和开发的方式,用于构建后端服务和 API。
  • 作用:处理业务逻辑、数据存储、认证授权等后端功能,为前端提供数据和服务支持。

3. Node.js

  • 定位:Node.js 是基于 Chrome V8 引擎的 JavaScript 运行时,用于在服务器端运行 JavaScript。
  • 在前端开发中的作用
    • 开发工具链:Node.js 用于运行前端构建工具(如 Vite、Webpack),处理模块化、打包、编译等任务。
    • 包管理器:通过 npm 或 yarn 来管理前端项目的依赖包。
  • 在后端开发中的作用(可选):
    • 构建后端服务:使用 Express、Koa 等框架构建后端 API。
    • 中间层:作为前端和后端之间的中间层,处理数据聚合、格式转换等。

三、前后端分离架构下的配合方式

1. 基本架构

  • 前端:使用 Vue 3 构建单页应用(SPA),在浏览器中运行,处理用户界面和交互。
  • 后端:使用 Java Spring Boot 构建 RESTful API,处理业务逻辑、数据存储,向前端提供数据服务。
  • 通信方式:前端通过 HTTP 请求(如 Axios)与后端 API 交互,获取或提交数据。

2. Node.js 的作用

  • 开发阶段

    • 必需性:Node.js 在前端开发阶段是必不可少的,因为前端构建工具(如 Vite、Webpack)需要 Node.js 环境来运行。
    • 作用
      • 运行构建工具,处理代码的模块化、编译、打包、热更新等。
      • 管理项目依赖,安装第三方库和插件。
  • 生产阶段

    • 可选性:在部署到生产环境时,Node.js 不一定是必需的,具体取决于部署方式。
    • 部署方式
      • 静态资源部署:将前端代码打包为静态文件(HTML、CSS、JavaScript),由 Nginx 等 Web 服务器直接提供,无需 Node.js 环境。
      • 服务器渲染或中间层(可选):如果需要服务器端渲染(SSR)或中间层处理,则需要在服务器上运行 Node.js。

3. Vue 3 与 Java Spring Boot 的交互

  • 前端发送请求:Vue 3 应用通过 Axios 或 Fetch API,向后端的 Spring Boot API 发送 HTTP 请求。
  • 后端处理请求:Spring Boot 接收请求,处理业务逻辑,访问数据库,返回 JSON 格式的数据。
  • 前端接收数据:Vue 3 应用接收后端返回的数据,更新组件的状态,渲染页面。

四、实际应用中的整合方式

1. 开发环境

  • 前端项目结构

    my-vue-app/
    ├── node_modules/       // 前端依赖,由 Node.js 管理
    ├── src/                // Vue 3 源代码
    ├── public/             // 公共资源
    ├── package.json        // 前端项目配置
    ├── vite.config.js      // Vite 配置文件
    └── ...
    
  • 后端项目结构

    my-springboot-app/
    ├── src/
    │   ├── main/
    │   │   ├── java/       // Java 源代码
    │   │   └── resources/  // 配置文件
    ├── pom.xml             // Maven 项目配置
    └── ...
    
  • 开发流程

    • 前端开发:使用 Vite 启动开发服务器,提供热更新和快速编译,需要 Node.js 环境。
    • 后端开发:使用 Spring Boot 启动后端服务器,提供 API 服务。
    • 跨域处理:由于前端和后端在不同的端口,需要处理跨域问题,可以在后端配置 CORS,或者在前端配置代理。

2. 生产环境

  • 前端部署

    • 打包静态文件:使用 npm run build 命令,将 Vue 3 应用打包为静态资源。
    • 部署方式
      • 方式一:将打包后的静态文件部署到 Nginx 等 Web 服务器,直接提供给浏览器。
      • 方式二:将静态文件放在 Spring Boot 项目的静态资源目录(如 src/main/resources/static),由后端服务器提供。
  • 后端部署

    • 独立部署:Spring Boot 应用作为独立的后端服务,部署在服务器上,提供 API 接口。

3. Node.js 在生产环境的可选性

  • 不使用 Node.js

    • 如果不需要服务器端渲染或中间层,前端打包为静态文件后,Node.js 在生产环境中并非必需。
    • 前端和后端通过 HTTP 请求交互,前端资源由 Web 服务器(如 Nginx)提供。
  • 使用 Node.js(可选):

    • 服务器端渲染(SSR):如果需要使用 Vue 3 的 SSR 功能,需要在服务器上运行 Node.js。
    • 中间层服务:如果希望在前后端之间增加一个中间层(如 BFF,Backend for Frontend),可以使用 Node.js 构建,处理复杂的业务逻辑或聚合多个后端服务。

上半部分总结

  • Node.js 在前端开发中的作用是必需的,因为构建工具和包管理器都依赖于 Node.js。

  • 在生产环境中,Node.js 是否必需取决于具体需求

    • 如果仅部署静态资源,不需要 Node.js 环境。
    • 如果需要 SSR 或中间层,则需要在服务器上运行 Node.js。
  • Vue 3 与 Java Spring Boot 的交互通过 HTTP 请求完成,两者之间的通信与 Node.js 无直接关系。


补充说明

  • Node.js 并不是前后端交互的必要条件,但在现代前端开发中,Node.js 是不可或缺的开发工具。

node.je(下)

node.js是怎么实现前端的构建工具和包依赖管理

一、Node.js 运行原理

Node.js 是一个 JavaScript 运行时环境,使得 JavaScript 可以在服务器端(或命令行)运行,而不仅仅是在浏览器中。
利用 Node.js,开发者可以编写和运行各种工具和脚本,这包括前端的构建工具和包依赖管理。

二、Node.js 实现前端构建工具的方式

1. 前端构建工具的作用

前端构建工具用于:

  • 模块化和打包:将多个 JavaScript 模块打包成一个或多个文件,方便浏览器加载。
  • 编译和转译:将高级的 JavaScript 语法(如 ES6+)或其他语言(如 TypeScript、SASS、LESS)转换为浏览器可以理解的 JavaScript 和 CSS。
  • 优化:压缩代码、去除注释、代码分割、图片压缩等,提高网页加载速度。
  • 开发辅助:提供热更新、代码检查、测试等功能,提升开发效率。

2. Node.js 作为运行环境

  • 执行环境:构建工具本质上是一些 JavaScript 脚本,需要一个运行环境来执行。Node.js 提供了这个环境,使得这些工具可以在命令行中运行。
  • 模块系统:Node.js 提供了模块系统,允许开发者引用和使用各种库和工具包。

3. 常见的前端构建工具

  • Webpack:一个高度可配置的模块打包工具,支持各种插件和加载器。
  • Vite:一种新型的构建工具,利用浏览器的原生 ES 模块支持,提供极速的开发体验。(现在主要用这个)
  • Babel:一个 JavaScript 编译器,将高级语法转译为兼容性更好的版本。
  • ESLint:代码检查工具,帮助保持代码风格一致,发现潜在错误。
  • Rollup:用于打包 JavaScript 模块的工具,侧重于库的打包。

4. Node.js 如何运行构建工具

  • 命令行执行:开发者在命令行中使用 Node.js 来执行构建工具。例如,运行 webpack 命令实际是执行了一个 Node.js 脚本。

    npx webpack --config webpack.config.js
    
  • 脚本配置:在 package.json 中,定义了构建工具的运行脚本,例如:

    {
      "scripts": {
        "build": "webpack --config webpack.config.js",
        "dev": "vite"
      }
    }
    

    运行 npm run buildnpm run dev,Node.js 会执行对应的脚本。

5. 工作流程

  • 编译和打包

    • 构建工具读取项目的入口文件(如 src/main.js)。
    • 解析模块依赖,处理 importrequire 语句。
    • 使用加载器(loader)和插件(plugin)处理不同类型的文件(如 .vue.ts.scss 等)。
    • 生成打包后的文件(如 dist/bundle.js)。
  • 开发服务器

    • 构建工具启动一个本地服务器,监听代码变化。
    • 当代码更新时,自动重新编译,并通过热更新(HMR)刷新浏览器。

三、Node.js 实现包依赖管理的方式

1. npm 和 yarn

  • npm(Node Package Manager)

    • Node.js 自带的包管理器,用于下载、安装和管理项目依赖。
    • 使用 package.json 文件记录项目的依赖关系、脚本和配置信息。
  • yarn

    • Facebook 开发的包管理器,提供更快的依赖安装和更好的版本管理。

2. 依赖管理的工作原理

  • 安装依赖

    • 使用 npm installyarn install 命令,读取 package.json,下载所需的依赖包到 node_modules 目录。
  • 版本管理

    • package.json 中的 dependenciesdevDependencies 定义了项目运行和开发时所需的依赖包及其版本。
    • package-lock.jsonyarn.lock 锁定了确切的依赖版本,确保团队成员和不同环境中的依赖一致。

3. 依赖包的使用

  • 模块化引用

    • 通过 require(CommonJS)或 import(ES Modules)语法,在项目中引用安装的依赖包。
    // CommonJS
    const express = require('express');
    
    // ES Modules
    import Vue from 'vue';
    
  • 全局命令

    • 某些工具可以全局安装,提供命令行工具,例如:

      npm install -g @vue/cli
      vue create my-project
      

4. 常见的依赖包管理操作

  • 安装依赖

    npm install lodash
    # 或者
    yarn add lodash
    
  • 安装开发依赖

    npm install --save-dev eslint
    # 或者
    yarn add eslint --dev
    
  • 更新依赖

    npm update
    # 或者
    yarn upgrade
    
  • 移除依赖

    npm uninstall lodash
    # 或者
    yarn remove lodash
    

四、Node.js 与前端构建工具和包管理的整合示例

1. 初始化项目

  • 使用 npm 或 yarn 初始化项目

    npm init -y
    # 或者
    yarn init -y
    
  • 生成的 package.json 文件

    {
      "name": "my-project",
      "version": "1.0.0",
      "main": "index.js",
      "license": "MIT",
      "dependencies": {},
      "devDependencies": {},
      "scripts": {}
    }
    

2. 安装构建工具

  • 安装 Vite(以 Vue 3 项目为例)

    npm install vite @vitejs/plugin-vue -D
    npm install vue
    

3. 配置构建脚本

  • package.json 中添加脚本

    {
      "scripts": {
        "dev": "vite",
        "build": "vite build",
        "serve": "vite preview"
      }
    }
    

4. 使用 Node.js 运行构建工具

  • 启动开发服务器

    npm run dev
    

    Node.js 会执行 vite 命令,启动开发服务器,提供热更新等功能。

  • 构建生产版本

    npm run build
    

    Node.js 执行 vite build 命令,打包代码,生成生产环境的静态文件。


五、为什么需要 Node.js 来管理前端构建工具和依赖

1. JavaScript 的普及

  • 统一的语言:Node.js 使用 JavaScript,使得前端和构建工具可以使用同一种语言,降低学习成本。

2. 丰富的生态系统

  • 大量的包和模块:npm 是全球最大的包管理器之一,提供了数百万个包,可以满足各种需求。

3. 强大的工具链

  • 高效的开发:Node.js 支持各种强大的前端构建工具和开发辅助工具,提高开发效率和代码质量。

4. 社区支持

  • 活跃的社区:Node.js 和 npm 社区活跃,更新迅速,能及时获得最新的工具和最佳实践。

下半部分总结

  • Node.js 作为运行环境,使得前端构建工具(如 Vite、Webpack、Babel 等)可以在命令行中运行,完成代码的编译、打包、优化等任务。

  • Node.js 提供了包管理器(npm),用于管理项目的依赖包,方便安装、更新和移除依赖。

  • 在前端项目中,Node.js 是不可或缺的开发工具,负责构建流程和依赖管理,提升开发效率和代码质量。


建议

  • 掌握 Node.js 基础:了解如何安装 Node.js,熟悉基本的命令行操作。

  • 熟悉 npm 或 yarn:学习如何使用包管理器来安装、更新和管理项目依赖。

  • 了解前端构建工具:学习 Vite、Webpack 等构建工具的基本原理和配置方法。

  • 实践:通过实际项目,练习如何使用 Node.js 进行构建和依赖管理。


参考资源

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352

推荐阅读更多精彩内容