我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么使用node.js开发前端打包程序

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么使用node.js开发前端打包程序

怎么使用node.js开发前端打包程序,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

我们在做前端开发的时候经常会在部署上线的时候做程序的打包和合并,我们接下来就会对如何使用 node.js 开发前端打包程序做非常深入的讲解,希望能够帮到有需要的同学。

我们现在做前端开发更多的是多人共同协作开发,每个人负责不同的模块,便于开发和调试。这样就导致我们***部署上线的时候需要把所有人开发的模块进行合并,生成单个或多个文件上线。如果手动合并的话肯定是费时又费力,而且非常容易出错,所以我们一般都是通过一些工具来实现自动合并的功能。

打包程序的原理非常简单,入口文件->寻找依赖关系->替换依赖关系->生成文件,其中中间的两个步骤是递归执行的。
我们先来看一下使用 node.js 如何完成一个简单的文件合并功能:

// 打包文件内容  var contentList = [];  // 排重列表  var loadedFileList = {};   // 打包主程序  function combine(filePath){      // 这里获取入口文件的内容      var fileContent = fs.readFileSync(filePath);      // 遍历文件内容      fileContent.forEach(function(value){          // 这里的findImport是需要你来实现的方法,用正则来匹配依赖关系          var matchFile = findImport(value);          if(matchFile){              //如果匹配到依赖关系              If(!loadedFileList[matchFile]){                  //如果依赖关系不在排重列表中,递归调用combine                  combine(matchFile);                  contentList.push(‘\n’);              }          }else{              contentList.push(value);          }      });  }

***只要根据 contentList 里面的内容来生成文件就可以了,怎么样,是不是很简单呢?下面我们就要介绍另外一种方式,使用流来完成我们的打包程序。

在 node.js 中,流(Stream)是一个由不同对象实现的抽象接口。流可以是可读的、可写的、或者既可读又可写的。所有的流都是 EventEmitter 的实例。我们可以通过继承接口来构造我们自己所需要的流。在我们的打包程序里面需要两个流,一个负责按行输出文件内容,另外一个负责处理依赖关系。所有的文件内容都在这两个流里面循环流动,当所有的依赖关系都处理完毕之后就结束流动并生成对应的文件,这样就达到我们的目的了。

让我们先来看一下负责按行输出文件内容的流是怎么样的:

var Stream = require('stream').Stream,      util = require('util'),      path = require('path'),      fs = require('fs');   // 构造函数  function LineStream() {      this.writable = true;      this.readable = true;      this.buffer = '';  }   module.exports = LineStream;  // 继承流接口  util.inherits(LineStream, Stream);   // 重写write方法,所有pipe过来的数据都会调用此方法  LineStream.prototype.write = function(data, encoding) {      var that = this;      // 把buffer转换为string类型      if (Buffer.isBuffer(data)) {          data = data.toString(encoding || 'utf8');      }       var parts = data.split(/\n/g);       // 如果有上一次的buffer存在就添加到最前面      if (this.buffer.length > 0) {          parts[0] = this.buffer + parts[0];      }       // 遍历并发送数据      for (var i = 0; i < parts.length - 1; i++) {          this.emit('data', parts[i]);      }      // 把***一行数据保存到buffer,使传递过来的数据保持连续和完整。      this.buffer = parts[parts.length - 1];  };  // end方法,在流结束时调用  LineStream.prototype.end = function() {      // 如果还有buffer,发送出去      if(this.buffer.length > 0){          this.emit('data',this.buffer);          this.buffer = '';      }      this.emit('end');  };

这样我们的 lineStream 就完成了,我们看到在 write 方法里面就做了一件事,分解传递过来的数据并按行发送出去,然后我们看下处理依赖关系的流 DepsStream。

var stream = require('stream').Stream;  var util = require('util');  var fs = require('fs');  var path = require('path');   module.exports = DepsStream;  util.inherits(DepsStream,stream);   function DepsStream(){      this.writable = true;      this.readable = true;      this.buffer = '';      this.depsList = [];  };   // 这里的write方法只发送数据,不对数据做任何的处理  DepsStream.prototype.write = function(data){      this.emit('data',data);  };   // 我们在这里重新pipe方法,使其能够处理依赖关系和生成最终文件  DepsStream.prototype.pipe = function(dest,opt){      var that = this;      function ondata(chunk){          var matches = findImport(chunk);          if(matches){              if(this.depsList.indexOf(matches) >= 0){                  // 我们在这里把处理过后的数据pipe回lineStream                  dest.write('\n');              }else{                  this.depsList.push(matches);                  var code = getFileContent(matches);                  // 我们在这里把处理过后的数据pipe回lineStream                  dest.write('\n' + code);              }          }else{              this.buffer += chunk + '\n';          }      }      function onend(){          // 生成最终文件          var code = this.buffer;          fs.writeFileSync(filePublishUrl,code);          console.log(filePublishUrl + ' combine done.');      }      // 监听end事件      that.on('end',onend);      // 监听data事件      that.on('data',ondata);  };   // end方法  DepsStream.prototype.end = function(){      this.emit('end');  };

我们看到上面的程序里面我们在 pipe 方法里面监听了 end 事件和 data 事件,ondata 方法主要用来对数据进行处理,发现有依赖关系的话就获取对应依赖关系的文件并重新发回给 LineStream 进行处理。onend 方法用来生成最终的文件,我们来看一下最终的调用方法:

var fileStream = fs.createReadStream(filepath);  var lineStream = new LineStream();  var depsStream = new DepsStream();   fileStream.pipe(lineStream);  lineStream.pipe(depsStream);  depsStream.pipe(lineStream);

看完上述内容,你们掌握怎么使用node.js开发前端打包程序的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网行业资讯频道,感谢各位的阅读!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么使用node.js开发前端打包程序

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

使用npm发布Node.JS程序包教程

npm是Node.JS的程序包管理器。进行Node.JS开发时,经常使用它安装/卸载程序包。实际上,发布程序包的工作也是由它来完成的。 配置package.json 要打包程序,首先要配好各项设置,这些设置都由程序包根目录下的package
2022-06-04

vue怎么打包发布程序

Vue是一款流行的JavaScript框架,用于快速构建交互式Web应用程序。Vue的一个重要特性就是其灵活的打包和发布机制,让开发者可以轻松地将其应用程序打包成可部署的文件,并发布到生产环境中使用。本文将介绍Vue打包发布程序的步骤,帮助读者了解如何使用Vue CLI构建和打包应用程序。第一步:安装Vue CLIVue CLI是一个命令行工具,它可以帮助我们创建新的Vue项目
2023-05-23

编程开发中怎么选择前端后端

这篇文章给大家分享的是有关编程开发中怎么选择前端后端的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前端和后端都好,不存在说哪个工资更高些,都基本在10000到30000之间,工资的差别主要体现在个人技术上。今天编
2023-06-20

前端开发:构建 Web 应用程序的前10个 JavaScript 框架

多年来,业界已经发布了大量 JavaScript 框架,怎样进行选择可能是一个挑战。如果你感到困惑,不知道应该选哪个或者究竟哪个适合你,那么我已经帮你解决了问题。在本文中,web前端小编将列出用来构建 Web 应用程序的前10个 JavaS
2023-06-03

怎么使用python多进程程序打包成exe

这篇文章主要介绍了怎么使用python多进程程序打包成exe的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用python多进程程序打包成exe文章都会有所收获,下面我们一起来看看吧。部分的多进程代码if
2023-07-04

python程序的打包分发怎么实现

这篇文章主要讲解了“python程序的打包分发怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python程序的打包分发怎么实现”吧!引言python编程时,一部分人习惯将实现同一个功
2023-07-02

怎么使用uniapp开发小程序

要使用uniapp开发小程序,你可以按照以下步骤进行操作:首先,安装uni-app开发工具,官方提供了uni-app的开发工具,你可以去uni-app官网下载并安装。创建一个新的uni-app项目,可以选择使用Vue.js或者原生小程序组件
怎么使用uniapp开发小程序
2024-04-09

如何使用Node.js开发高效的Web应用程序

随着互联网的快速发展,面向互联网的应用程序开发成为了众多软件开发领域中的一个重要分支。而Node.js的出现,也使得Web应用程序开发的范式发生了改变。Node.js是一个事件驱动、非阻塞I/O的JavaScript运行环境,这个JavaScript运行环境并不是运行在浏览器中,而是运行在服务器端。基于Node.js,开发者们可以借助其轻量的架构,使用JavaScript编写高
2023-05-14

小程序开发中animation怎么使用

这篇文章主要介绍“小程序开发中animation怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“小程序开发中animation怎么使用”文章能帮助大家解决问题。动画实例可以调用以下方法来描述动
2023-06-26

怎么使用Python开发设备程序

这篇文章主要讲解了“怎么使用Python开发设备程序”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python开发设备程序”吧!使用方式如下:1. 下载文末附件中的 libdtpyt
2023-06-15

.net6怎么使用Senparc开发小程序

本篇内容介绍了“.net6怎么使用Senparc开发小程序”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.添加引用2.添加配置文件///
2023-07-02

c#窗体应用程序怎么打包

问题:如何打包 c# 窗体应用程序?答案:通过 visual studio 发布应用程序,选择文件夹作为部署目标,配置发布设置,生成发布包并将其安装在目标计算机上。具体步骤:发布应用程序选择文件夹作为部署目标配置发布设置(目标文件夹、配置、
c#窗体应用程序怎么打包
2024-05-12

怎么使用node.js处理前端提交的GET请求

本篇内容介绍了“怎么使用node.js处理前端提交的GET请求”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、获取GET请求流程1、首先和
2023-06-17

编程热搜

目录