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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。