atm-scp

通过scp命令上传指定文件夹到远程地址

Usage no npm install needed!

<script type="module">
  import atmScp from 'https://cdn.skypack.dev/atm-scp';
</script>

README

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
 *
 */