node优化,如何使用node

  node优化,如何使用node

  本文带你了解在工作中如何使用node,如何使用node提高工作效率。希望对你有帮助!

  node.js速度课程简介:进入学习

  在工作项目中,我们需要依赖外部文件。这个文件由其他团队维护,由jenkins构建,构建产品推送到【亚马逊S3】(AWS . Amazon . com/pm/serv-S3/…)。我们需要从S3手动下载文件,然后将它们复制到项目中。整个过程可以自动完成。

  另外还有一个严重的问题:我们在S3需要的build产品的路径类似于 a/b//c/,多出来的一个/其实是一个名为/的文件夹,使用windows的S3浏览器也能正常识别,可能是因为/在mac下被当成了文件分隔符。所以尝试了几个GUI工具都无法正常识别目录,mac开发者还需要在虚拟机中使用windows下载产品,这是极其浪费的,也是没有意义的。[推荐研究:《nodejs 教程》]

  Amazon提供API访问,所以认为可以实现脚本来下载更新。

  

流程梳理

  未使用脚本:

  使用脚本:

  Jenkins 产品名称执行脚本

  这个可以直接做,可以省略手动过程,不会出现/bug问题。

  

开发

  

连接 AWS

  这里使用亚马逊提供的aws-sdk,使用S3客户端,传入accessKeyId和secretAccessKey即可连接:

  从“aws-sdk/clients/s3”导入S3;

  const s3=新S3({ credentials: { accessKeyId,secretAccessKey } });

下载文件

   aws-sdk提供添加、删除和检查桶和文件的接口。在这里,我们可以得到jenkins预先构建的产品文件名。这里,我们需要根据文件名和位置下载文件:

  常数rs=s3。getObject({ Bucket:您的存储桶名称,Key:文件目录路径 })。createReadStream();Bucket是存储文件的桶位置,Key是文件在S3的路径信息。完整路径相当于目录名和文件名。

  这里我们可以得到一个ReadStream,然后用node.js直接在本地写:

  const ws=fs . createwritestream(path . join(_ _ dirname,output filename));

  rs .管道(ws);

解压

  使用node-tar工具解压缩,直接安装即可:

  npinstall tar extract的别名是x,这里直接使用tar.x方法。这个方法可以直接处理ReadStream,解压缩原始数据并写入文件。因此,我们可以直接将ReadStream导入tar.x,而无需保存原件。tar文件:

  -const ws=fs . createwritestream(path . join(_ _ dirname,output filename));

  -RS . pipe(ws);

  RS . pipe(tar . x({ C:path . join(_ _ dirname,output filename)});这里,管道操作返回流对象,我们可以监听finish方法来处理后续过程:

  const s=RS . pipe(tar . x({ C:path . join(_ _ dirname,output filename)});

  s.on(完成,()={

  //做点什么.

  })

Flatten 目录

  原文件有子文件夹,我们需要把它们全部移到最外层,所以需要做一个平铺文件夹操作。

  这里,fs相关的API用于读取。fs API分为同步API和异步API。同步API函数名以sync结尾,异步函数默认为回调错误优先样式。fs/promises下提供了相应的promise风格的异步API,可以根据需要在这里使用。

  由于我们的目录只有一层,我们只做一层扁平化。如果有多层,我们可以用递归来实现:

  异步函数展平(dir) {

  const fileAndDirs=await FSP . readdir(dir);

  const dirs=fileanddirs . filter((I)=)

  fs.lstatSync(path.join(dir,I))。isDirectory()

  );

  for(目录的const innerDir

  const innerFile=await FSP . readdir(path . join(dir,innerDir));

  等待承诺

  内部文件。filter((item)=fs . lstatsync(path . join(dir,innerDir,item))。isFile())。地图((项目)=地图

  fsp.rename(path.join(dir,innerDir,item),path.join(dir,item))

  ),

  ]);

  remove(path.join(dir,innerDir));

  }

  }

复制到目标位置

  后复制到我们的项目目录。复制只需要调用copyFile API。对于不需要的文件,使用正则表达式在此配置排除黑名单:

  异步函数复制(从,到){

  const files=await FSP . readdir(from);

  等待承诺

  文件。过滤器((项)=!exclude.test(项目))。map((item)=FSP . copy file(path . join(from,item),path.join(to,item)))

  );

  }

配置文件

  在实际使用中,配置文件要和代码分开。这里,accessKeyId和secretAccessKey应该由每个用户配置,因此它们被放在一个单独的配置文件中。该文件由用户在本地创建,相关配置内容在主程序中读取:

  //config.js

  模块.导出={

  s3: {

  accessKeyId: accessKeyId ,

  secret access key: secret access key ,

  }

  };

  //main.js

  如果(!fs . exists sync( config . js ){

  console.error(请创建配置文件);

  返回;

  }

  const config=require(path . resolve(_ _ dirname, config . js );

传递参数

  每次下载的文件名在调用时都需要传入,写入文件时会频繁修改。在这里,它直接作为参数传递。

  Node.js可以通过process.argv读取,这是一个数组。这个数组的第一个元素是node所在的安装路径,第二个元素是当前执行的脚本所在的路径,第三个元素是自定义参数,所以需要从process.argv[2]开始。如果有复杂的命令行参数需求,可以使用commander等命令行参数分析库。由于该示例只需要一个参数,您可以在此处直接读取:

  const文件名=process . argv[2];

  如果(!文件名){

  console.error(请使用参数运行脚本);

  返回;

  }至此,一个可用的命令行工具就完成了。

  

总结

   node.js可以开发后端,但node.js最大的意义绝不是用js开发后端。对于前端开发者来说,node.js的真正价值在于它是一个非常实用的工具。Webpack、rollup、dev-server等前端工具。都是由node创建的。由于NPM丰富的生态,使用node可以快速完成脚本开发,有效处理开发中遇到的一些工具链和效率问题。工作中遇到问题可以考虑尝试一下。

  有关编程的更多信息,请访问:编程入门!这就是如何使用node提高工作效率的细节。请多关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: