1.0.6 • Published 9 years ago
atm-scp v1.0.6
atm-scp
通过scp命令上传指定文件夹到远程地址
npm instal atm-scp --save
/**
* 功能需求:
* 上传指定文件夹到远程
*
* 细节需求:
* 1.可以指定无需上传的文件/文件夹
* 2.对于文件内容相同的文件不得进行覆盖
* 3.上传期间锁定目录,防止多人操作冲突
* 4.可以指定线程数量
* 5.兼容mac,win系统
*
* 对应实现思路:
* 1.https://github.com/isaacs/node-glob
* 2.例如上传目录下有个文件的内容为content
* 那么每次上传之后,根据该文件的内容,生成一个唯一的标识:md5(content)+sha1(content) [ps: md5和sha1是加密算法]
* 每次上传之后都把所有文件的标识存入一个文件(暂且叫地图文件)里面
* 在上传之前先把地图文件下载到本地,然后与本地的文件的标识做比较,找出内容有变化的文件进行上传
* 3.上传开始时在远程地址下创建一个文件锁,在程序开始时检测远程地址是否有文件锁
* 4.暂时略过,作为后续优化项
* 5.对于win32系统来说,主要问题是路径里面的反斜线(\)需要替换成正斜线(/)
*
* module.exports = function(opts){}
* opts:
* {
* src: '', // 要上传的文件夹的绝对路径 eg from: /local/path/to/test
* dest: '', // 上传到的远程绝对路径 to: /remote/path/to/test
* exclusions: [], // 需要排除的文件规则,默认从src目录开始匹配
* excludeOptions: { // 参考glob模块的options配置参数
* cwd: src,
* root: src
* },
* folder: '__atm__', // 文件锁和地图文件所在远程服务器文件夹名称,默认为 __atm__
* force: false, // 是否在远程目录锁定时强制上传
* auth: { // 上传配置,参照scp2模块
* host: '',
* username: '',
* password: ''
* },
* interval: 1000*3600*24*15 //创建时间超过15天的临时目录可以删除,主要防止runtime文件夹下无用的文件夹太多,一般不用设置该参数
* }
*
* 用法
* var deploy = require('atm-scp');
* deploy(opts);
*
* 开发相关
* https://github.com/spmjs/node-scp2
* https://github.com/isaacs/node-glob
* https://github.com/jprichardson/node-fs-extra
*
* https://github.com/lodash/lodash
*
*/