first commit
This commit is contained in:
parent
67d0f7f94c
commit
d2c4245ea7
|
@ -0,0 +1,75 @@
|
||||||
|
# Created by .ignore support plugin (hsz.mobi)
|
||||||
|
### JetBrains template
|
||||||
|
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
||||||
|
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
||||||
|
|
||||||
|
# User-specific stuff
|
||||||
|
.idea/**/workspace.xml
|
||||||
|
.idea/**/tasks.xml
|
||||||
|
.idea/**/usage.statistics.xml
|
||||||
|
.idea/**/dictionaries
|
||||||
|
.idea/**/shelf
|
||||||
|
|
||||||
|
# Generated files
|
||||||
|
.idea/**/contentModel.xml
|
||||||
|
|
||||||
|
# Sensitive or high-churn files
|
||||||
|
.idea/**/dataSources/
|
||||||
|
.idea/**/dataSources.ids
|
||||||
|
.idea/**/dataSources.local.xml
|
||||||
|
.idea/**/sqlDataSources.xml
|
||||||
|
.idea/**/dynamic.xml
|
||||||
|
.idea/**/uiDesigner.xml
|
||||||
|
.idea/**/dbnavigator.xml
|
||||||
|
|
||||||
|
# Gradle
|
||||||
|
.idea/**/gradle.xml
|
||||||
|
.idea/**/libraries
|
||||||
|
|
||||||
|
# Gradle and Maven with auto-import
|
||||||
|
# When using Gradle or Maven with auto-import, you should exclude module files,
|
||||||
|
# since they will be recreated, and may cause churn. Uncomment if using
|
||||||
|
# auto-import.
|
||||||
|
# .idea/artifacts
|
||||||
|
# .idea/compiler.xml
|
||||||
|
# .idea/jarRepositories.xml
|
||||||
|
# .idea/modules.xml
|
||||||
|
# .idea/*.iml
|
||||||
|
# .idea/modules
|
||||||
|
# *.iml
|
||||||
|
# *.ipr
|
||||||
|
|
||||||
|
# CMake
|
||||||
|
cmake-build-*/
|
||||||
|
|
||||||
|
# Mongo Explorer plugin
|
||||||
|
.idea/**/mongoSettings.xml
|
||||||
|
|
||||||
|
# File-based project format
|
||||||
|
*.iws
|
||||||
|
|
||||||
|
# IntelliJ
|
||||||
|
out/
|
||||||
|
|
||||||
|
# mpeltonen/sbt-idea plugin
|
||||||
|
.idea_modules/
|
||||||
|
|
||||||
|
# JIRA plugin
|
||||||
|
atlassian-ide-plugin.xml
|
||||||
|
|
||||||
|
# Cursive Clojure plugin
|
||||||
|
.idea/replstate.xml
|
||||||
|
|
||||||
|
# Crashlytics plugin (for Android Studio and IntelliJ)
|
||||||
|
com_crashlytics_export_strings.xml
|
||||||
|
crashlytics.properties
|
||||||
|
crashlytics-build.properties
|
||||||
|
fabric.properties
|
||||||
|
|
||||||
|
# Editor-based Rest Client
|
||||||
|
.idea/httpRequests
|
||||||
|
|
||||||
|
# Android studio 3.1+ serialized cache file
|
||||||
|
.idea/caches/build_file_checksums.ser
|
||||||
|
.idea
|
||||||
|
.idea/*
|
111
README.md
111
README.md
|
@ -2,68 +2,61 @@
|
||||||
|
|
||||||
### 使用方法:
|
### 使用方法:
|
||||||
|
|
||||||
1. `在自己项目根目录`拉取代码
|
1. 下载项目
|
||||||
```
|
```
|
||||||
npx degit https://github.com/KeiferJu/auto-deploy.git deploy
|
npm install @dllcn/auto-deploy -D
|
||||||
|
|
||||||
cd deploy
|
|
||||||
|
|
||||||
npm install
|
|
||||||
```
|
```
|
||||||
|
|
||||||
2. 配置使用
|
2. 添加执行命令
|
||||||
|
|
||||||
在项目package.json中配置命令:
|
|
||||||
```
|
```
|
||||||
...
|
"deploy": "node ./node_modules/@dllcn/auto-deploy"
|
||||||
|
|
||||||
"scripts": {
|
|
||||||
...
|
|
||||||
"deploy": "node ./deploy/upload.js"
|
|
||||||
},
|
|
||||||
|
|
||||||
...
|
|
||||||
```
|
```
|
||||||
|
|
||||||
然后在`deploy/config.js`里面配置上自己服务器信息,执行命令就可以部署了:
|
3. 在项目根目录创建`deploy.config.js`文件:
|
||||||
```
|
|
||||||
npm run deploy
|
```javascript
|
||||||
```
|
module.exports = Object.freeze({
|
||||||
|
development: {//测试
|
||||||
### 相关配置项
|
SERVER_PATH: 'xxx', // ssh地址 服务器地址
|
||||||
|
SSH_USER: 'root', // ssh 用户名
|
||||||
#### 必要配置
|
//方式一 用秘钥登录服务器(推荐), private 本机私钥文件地址(需要在服务器用户目录 一般是 /root/.ssh/authorized_keys 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏)
|
||||||
- OUTPUT_PATH:
|
// PRIVATE_KEY: 'C:/Users/Html5/.ssh/id_rsa',
|
||||||
|
PASSWORD: 'xxx', //方式二 用密码连接服务器
|
||||||
需要上传文件夹路径,默认dist
|
PATH: '/var/local', // 需要上传的服务器目录地址 如 /usr/local/nginx/html
|
||||||
- SERVER_PATH:
|
OUTPUT_PATH: 'dist', // 需要上传文件夹路径,默认dist
|
||||||
|
NAME: 'llcn',
|
||||||
服务器路径
|
PORT: 22
|
||||||
- SSH_USER:
|
},
|
||||||
|
production: {//正式
|
||||||
服务器用户名
|
SERVER_PATH: 'xxx',
|
||||||
- PRIVATE_KEY:
|
SSH_USER: 'root',
|
||||||
|
//方式一 用秘钥登录服务器(推荐), private 本机私钥文件地址(需要在服务器用户目录 一般是 /root/.ssh/authorized_keys 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏)
|
||||||
用秘钥登录服务器(推荐)的秘钥地址, 本机私钥文件地址(需要在服务器用户目录 一般是 /root/.ssh/authorized_keys 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏)
|
// PRIVATE_KEY: 'C:/Users/Html5/.ssh/id_rsa',
|
||||||
- PASSWORD:
|
PASSWORD: 'xxx',
|
||||||
|
PATH: '/var/local', // 需要上传的服务器目录地址 如 /usr/local/nginx/html
|
||||||
如果密码登录,填入密码,并且不能设置PRIVATE_KEY参数
|
OUTPUT_PATH: 'dist', // 需要上传文件夹路径,默认dist
|
||||||
|
NAME: 'llcn',
|
||||||
- PORT:
|
PORT: 22
|
||||||
端口
|
}
|
||||||
|
})
|
||||||
|
|
||||||
#### 扩展配置
|
/**
|
||||||
- CLEAR_OLDFILES:
|
* 必要配置
|
||||||
|
*/
|
||||||
是否默认删除上传文件夹内容
|
// OUTPUT_PATH: 需要上传文件夹路径,默认dist
|
||||||
- RENAME:
|
// SERVER_PATH: 服务器路径
|
||||||
|
// SSH_USER: 服务器用户名
|
||||||
是否改名,字符串,参数为是文件夹新名字
|
// PRIVATE_KEY: 'C:/Users/Html5/.ssh/id_rsa' 用秘钥登录服务器(推荐)的秘钥地址, private 本机私钥文件地址(需要在服务器用户目录 一般是 /root/.ssh/authorized_keys 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏)
|
||||||
- BACKUP:
|
// PASSWORD: 密码
|
||||||
|
// PORT: 端口
|
||||||
是否备份,默认false
|
|
||||||
- EXTENDS
|
/**
|
||||||
|
* 扩展配置
|
||||||
任务结束后,有时有的操作需要其他命令支持,可以使用扩展,填入自己要用的命令数组.例如:['cd demo', 'rm -rf *']
|
*/
|
||||||
|
// BACKUP: 是否备份,默认false
|
||||||
|
// DELETE_LOCAL_PACKAGE: 成功后是否删除本地压缩包,默认false
|
||||||
|
// BUILD_SHELL: 是否启动自动上传前编译,如果启用,填入编译命令
|
||||||
|
// LOADINGSTYLE: 进度动画,默认为 arrow4 加载动画 有 dots 至 dots12 如 dots6,line ,pipe , star, arrow 至 arrow4 等等
|
||||||
|
// EXTENDS: 任务结束后,有时有的操作需要其他命令支持,可以使用扩展,填入自己要用的命令数组.例如:['cd demo', 'rm -rf *']
|
||||||
|
|
||||||
|
```
|
||||||
|
|
|
@ -1,915 +0,0 @@
|
||||||
{
|
|
||||||
"name": "auto-deploy",
|
|
||||||
"version": "1.0.0",
|
|
||||||
"lockfileVersion": 1,
|
|
||||||
"requires": true,
|
|
||||||
"dependencies": {
|
|
||||||
"@types/color-name": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"aggregate-error": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz",
|
|
||||||
"integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"clean-stack": "^2.0.0",
|
|
||||||
"indent-string": "^4.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ansi-escapes": {
|
|
||||||
"version": "4.3.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz",
|
|
||||||
"integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"type-fest": "^0.11.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ansi-regex": {
|
|
||||||
"version": "5.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
|
|
||||||
"integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"ansi-styles": {
|
|
||||||
"version": "4.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
|
|
||||||
"integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@types/color-name": "^1.1.1",
|
|
||||||
"color-convert": "^2.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"asn1": {
|
|
||||||
"version": "0.2.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
|
|
||||||
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"safer-buffer": "~2.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"balanced-match": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"bcrypt-pbkdf": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"tweetnacl": "^0.14.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"bl": {
|
|
||||||
"version": "1.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
|
|
||||||
"integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"readable-stream": "^2.3.5",
|
|
||||||
"safe-buffer": "^5.1.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"brace-expansion": {
|
|
||||||
"version": "1.1.11",
|
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
|
|
||||||
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"balanced-match": "^1.0.0",
|
|
||||||
"concat-map": "0.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"buffer-alloc": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz",
|
|
||||||
"integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"buffer-alloc-unsafe": "^1.1.0",
|
|
||||||
"buffer-fill": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"buffer-alloc-unsafe": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz",
|
|
||||||
"integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"buffer-crc32": {
|
|
||||||
"version": "0.2.13",
|
|
||||||
"resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz",
|
|
||||||
"integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"buffer-fill": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"chalk": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz",
|
|
||||||
"integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"ansi-styles": "^4.1.0",
|
|
||||||
"supports-color": "^7.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"chardet": {
|
|
||||||
"version": "0.7.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
|
|
||||||
"integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"clean-stack": {
|
|
||||||
"version": "2.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
|
|
||||||
"integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"cli-cursor": {
|
|
||||||
"version": "3.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
|
|
||||||
"integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"restore-cursor": "^3.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"cli-spinners": {
|
|
||||||
"version": "2.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.2.0.tgz",
|
|
||||||
"integrity": "sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"cli-width": {
|
|
||||||
"version": "2.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
|
|
||||||
"integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"clone": {
|
|
||||||
"version": "1.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
|
|
||||||
"integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"color-convert": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
|
||||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"color-name": "~1.1.4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"color-name": {
|
|
||||||
"version": "1.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
|
||||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"compressing": {
|
|
||||||
"version": "1.5.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/compressing/-/compressing-1.5.0.tgz",
|
|
||||||
"integrity": "sha512-CPMzMd/MswJh7CPRo605FQhXQlP0JbwCjPteh9GZ0jYTQcDBrYJLEW7Fm1dpTdOHk0/2ZE2C8SO5EX4Dp7KZ8w==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"flushwritable": "^1.0.0",
|
|
||||||
"get-ready": "^1.0.0",
|
|
||||||
"iconv-lite": "^0.5.0",
|
|
||||||
"mkdirp": "^0.5.1",
|
|
||||||
"pump": "^3.0.0",
|
|
||||||
"streamifier": "^0.1.1",
|
|
||||||
"tar-stream": "^1.5.2",
|
|
||||||
"yauzl": "^2.7.0",
|
|
||||||
"yazl": "^2.4.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"concat-map": {
|
|
||||||
"version": "0.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
|
|
||||||
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"core-util-is": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"defaults": {
|
|
||||||
"version": "1.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
|
|
||||||
"integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"clone": "^1.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"emoji-regex": {
|
|
||||||
"version": "8.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
|
||||||
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"end-of-stream": {
|
|
||||||
"version": "1.4.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
|
|
||||||
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"once": "^1.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"escape-string-regexp": {
|
|
||||||
"version": "1.0.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
|
|
||||||
"integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"external-editor": {
|
|
||||||
"version": "3.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
|
|
||||||
"integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"chardet": "^0.7.0",
|
|
||||||
"iconv-lite": "^0.4.24",
|
|
||||||
"tmp": "^0.0.33"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"iconv-lite": {
|
|
||||||
"version": "0.4.24",
|
|
||||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
|
|
||||||
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"safer-buffer": ">= 2.1.2 < 3"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"fd-slicer": {
|
|
||||||
"version": "1.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz",
|
|
||||||
"integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"pend": "~1.2.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"figures": {
|
|
||||||
"version": "3.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
|
|
||||||
"integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"escape-string-regexp": "^1.0.5"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flushwritable": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/flushwritable/-/flushwritable-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-PjKNj95BKtR+c44751C00pAENJg=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"fs-constants": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"fs.realpath": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"get-ready": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/get-ready/-/get-ready-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-+RgX8emt7P6hOlYq38jeiDqzR4I=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"glob": {
|
|
||||||
"version": "7.1.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
|
|
||||||
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"fs.realpath": "^1.0.0",
|
|
||||||
"inflight": "^1.0.4",
|
|
||||||
"inherits": "2",
|
|
||||||
"minimatch": "^3.0.4",
|
|
||||||
"once": "^1.3.0",
|
|
||||||
"path-is-absolute": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"has-flag": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"iconv-lite": {
|
|
||||||
"version": "0.5.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.5.1.tgz",
|
|
||||||
"integrity": "sha512-ONHr16SQvKZNSqjQT9gy5z24Jw+uqfO02/ngBSBoqChZ+W8qXX7GPRa1RoUnzGADw8K63R1BXUMzarCVQBpY8Q==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"safer-buffer": ">= 2.1.2 < 3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"indent-string": {
|
|
||||||
"version": "4.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
|
|
||||||
"integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"inflight": {
|
|
||||||
"version": "1.0.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
|
|
||||||
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"once": "^1.3.0",
|
|
||||||
"wrappy": "1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"inherits": {
|
|
||||||
"version": "2.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
|
|
||||||
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"inquirer": {
|
|
||||||
"version": "7.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz",
|
|
||||||
"integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"ansi-escapes": "^4.2.1",
|
|
||||||
"chalk": "^3.0.0",
|
|
||||||
"cli-cursor": "^3.1.0",
|
|
||||||
"cli-width": "^2.0.0",
|
|
||||||
"external-editor": "^3.0.3",
|
|
||||||
"figures": "^3.0.0",
|
|
||||||
"lodash": "^4.17.15",
|
|
||||||
"mute-stream": "0.0.8",
|
|
||||||
"run-async": "^2.4.0",
|
|
||||||
"rxjs": "^6.5.3",
|
|
||||||
"string-width": "^4.1.0",
|
|
||||||
"strip-ansi": "^6.0.0",
|
|
||||||
"through": "^2.3.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"interpret": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
|
|
||||||
"integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"is-fullwidth-code-point": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
|
||||||
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"is-interactive": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"is-promise": {
|
|
||||||
"version": "2.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
|
|
||||||
"integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"isarray": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"lodash": {
|
|
||||||
"version": "4.17.15",
|
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
|
|
||||||
"integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"log-symbols": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
|
|
||||||
"integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"chalk": "^2.4.2"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"ansi-styles": {
|
|
||||||
"version": "3.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
|
|
||||||
"integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"color-convert": "^1.9.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"chalk": {
|
|
||||||
"version": "2.4.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
|
|
||||||
"integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"ansi-styles": "^3.2.1",
|
|
||||||
"escape-string-regexp": "^1.0.5",
|
|
||||||
"supports-color": "^5.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"color-convert": {
|
|
||||||
"version": "1.9.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
|
|
||||||
"integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"color-name": "1.1.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"color-name": {
|
|
||||||
"version": "1.1.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
|
|
||||||
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"has-flag": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
|
|
||||||
"integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"supports-color": {
|
|
||||||
"version": "5.5.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
|
|
||||||
"integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"has-flag": "^3.0.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"mimic-fn": {
|
|
||||||
"version": "2.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
|
|
||||||
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"minimatch": {
|
|
||||||
"version": "3.0.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
|
|
||||||
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"brace-expansion": "^1.1.7"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"minimist": {
|
|
||||||
"version": "1.2.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
|
|
||||||
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"mkdirp": {
|
|
||||||
"version": "0.5.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz",
|
|
||||||
"integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"minimist": "^1.2.5"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"mute-stream": {
|
|
||||||
"version": "0.0.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
|
|
||||||
"integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"node-ssh": {
|
|
||||||
"version": "8.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/node-ssh/-/node-ssh-8.0.0.tgz",
|
|
||||||
"integrity": "sha512-xqX3ia49AYDcL02KUqk+rtdqTSbLcca+R2MasiLGuF55NBH1BYvw61iFXSMR898vA8vYMTQDSVRvTLx4Lior5Q==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"p-map": "^3.0.0",
|
|
||||||
"sb-promisify": "^2.0.1",
|
|
||||||
"sb-scandir": "^2.0.0",
|
|
||||||
"shell-escape": "^0.2.0",
|
|
||||||
"ssh2": "^0.8.7"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"once": {
|
|
||||||
"version": "1.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
|
|
||||||
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"wrappy": "1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"onetime": {
|
|
||||||
"version": "5.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz",
|
|
||||||
"integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"mimic-fn": "^2.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ora": {
|
|
||||||
"version": "4.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/ora/-/ora-4.0.3.tgz",
|
|
||||||
"integrity": "sha512-fnDebVFyz309A73cqCipVL1fBZewq4vwgSHfxh43vVy31mbyoQ8sCH3Oeaog/owYOs/lLlGVPCISQonTneg6Pg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"chalk": "^3.0.0",
|
|
||||||
"cli-cursor": "^3.1.0",
|
|
||||||
"cli-spinners": "^2.2.0",
|
|
||||||
"is-interactive": "^1.0.0",
|
|
||||||
"log-symbols": "^3.0.0",
|
|
||||||
"mute-stream": "0.0.8",
|
|
||||||
"strip-ansi": "^6.0.0",
|
|
||||||
"wcwidth": "^1.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"os-tmpdir": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"p-map": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
|
|
||||||
"integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"aggregate-error": "^3.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"path-is-absolute": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
|
|
||||||
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"path-parse": {
|
|
||||||
"version": "1.0.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
|
|
||||||
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"pend": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
|
|
||||||
"integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"process-nextick-args": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
|
|
||||||
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"pump": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
|
|
||||||
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"end-of-stream": "^1.1.0",
|
|
||||||
"once": "^1.3.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"readable-stream": {
|
|
||||||
"version": "2.3.7",
|
|
||||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
|
|
||||||
"integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"core-util-is": "~1.0.0",
|
|
||||||
"inherits": "~2.0.3",
|
|
||||||
"isarray": "~1.0.0",
|
|
||||||
"process-nextick-args": "~2.0.0",
|
|
||||||
"safe-buffer": "~5.1.1",
|
|
||||||
"string_decoder": "~1.1.1",
|
|
||||||
"util-deprecate": "~1.0.1"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"safe-buffer": {
|
|
||||||
"version": "5.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
|
||||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
|
|
||||||
"dev": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"rechoir": {
|
|
||||||
"version": "0.6.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
|
|
||||||
"integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"resolve": "^1.1.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"resolve": {
|
|
||||||
"version": "1.15.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
|
|
||||||
"integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"path-parse": "^1.0.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"restore-cursor": {
|
|
||||||
"version": "3.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
|
|
||||||
"integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"onetime": "^5.1.0",
|
|
||||||
"signal-exit": "^3.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"run-async": {
|
|
||||||
"version": "2.4.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz",
|
|
||||||
"integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"is-promise": "^2.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"rxjs": {
|
|
||||||
"version": "6.5.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz",
|
|
||||||
"integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"tslib": "^1.9.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"safe-buffer": {
|
|
||||||
"version": "5.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
|
|
||||||
"integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"safer-buffer": {
|
|
||||||
"version": "2.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
|
|
||||||
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"sb-promisify": {
|
|
||||||
"version": "2.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/sb-promisify/-/sb-promisify-2.0.2.tgz",
|
|
||||||
"integrity": "sha1-QnelR1RIiqlnXYhuNU24lMm9yYE=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"sb-scandir": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/sb-scandir/-/sb-scandir-2.0.0.tgz",
|
|
||||||
"integrity": "sha512-SKbyMJB0DUt9OgN4tP2RBcn9OsR26DEpe+nwaDkQTNcrJSJI0FlLhXhBpTd/YEnlQ2GdLrbszSNekGLw4rweOQ==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"p-map": "^1.2.0",
|
|
||||||
"sb-promisify": "^2.0.1"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"p-map": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
|
|
||||||
"integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
|
|
||||||
"dev": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"shell-escape": {
|
|
||||||
"version": "0.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/shell-escape/-/shell-escape-0.2.0.tgz",
|
|
||||||
"integrity": "sha1-aP0CXrBJC09WegJ/C/IkgLX4QTM=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"shelljs": {
|
|
||||||
"version": "0.8.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz",
|
|
||||||
"integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"glob": "^7.0.0",
|
|
||||||
"interpret": "^1.0.0",
|
|
||||||
"rechoir": "^0.6.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"signal-exit": {
|
|
||||||
"version": "3.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
|
|
||||||
"integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"ssh2": {
|
|
||||||
"version": "0.8.9",
|
|
||||||
"resolved": "https://registry.npmjs.org/ssh2/-/ssh2-0.8.9.tgz",
|
|
||||||
"integrity": "sha512-GmoNPxWDMkVpMFa9LVVzQZHF6EW3WKmBwL+4/GeILf2hFmix5Isxm7Amamo8o7bHiU0tC+wXsGcUXOxp8ChPaw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"ssh2-streams": "~0.4.10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ssh2-streams": {
|
|
||||||
"version": "0.4.10",
|
|
||||||
"resolved": "https://registry.npmjs.org/ssh2-streams/-/ssh2-streams-0.4.10.tgz",
|
|
||||||
"integrity": "sha512-8pnlMjvnIZJvmTzUIIA5nT4jr2ZWNNVHwyXfMGdRJbug9TpI3kd99ffglgfSWqujVv/0gxwMsDn9j9RVst8yhQ==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"asn1": "~0.2.0",
|
|
||||||
"bcrypt-pbkdf": "^1.0.2",
|
|
||||||
"streamsearch": "~0.1.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"streamifier": {
|
|
||||||
"version": "0.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/streamifier/-/streamifier-0.1.1.tgz",
|
|
||||||
"integrity": "sha1-l+mNj6TRBdYqJpHR3AfoINuN/E8=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"streamsearch": {
|
|
||||||
"version": "0.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz",
|
|
||||||
"integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"string-width": {
|
|
||||||
"version": "4.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
|
|
||||||
"integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"emoji-regex": "^8.0.0",
|
|
||||||
"is-fullwidth-code-point": "^3.0.0",
|
|
||||||
"strip-ansi": "^6.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"string_decoder": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"safe-buffer": "~5.1.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"safe-buffer": {
|
|
||||||
"version": "5.1.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
|
||||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
|
|
||||||
"dev": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"strip-ansi": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
|
|
||||||
"integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"ansi-regex": "^5.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"supports-color": {
|
|
||||||
"version": "7.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
|
|
||||||
"integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"has-flag": "^4.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tar-stream": {
|
|
||||||
"version": "1.6.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz",
|
|
||||||
"integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"bl": "^1.0.0",
|
|
||||||
"buffer-alloc": "^1.2.0",
|
|
||||||
"end-of-stream": "^1.0.0",
|
|
||||||
"fs-constants": "^1.0.0",
|
|
||||||
"readable-stream": "^2.3.0",
|
|
||||||
"to-buffer": "^1.1.1",
|
|
||||||
"xtend": "^4.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"through": {
|
|
||||||
"version": "2.3.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
|
|
||||||
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"tmp": {
|
|
||||||
"version": "0.0.33",
|
|
||||||
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
|
|
||||||
"integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"os-tmpdir": "~1.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"to-buffer": {
|
|
||||||
"version": "1.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz",
|
|
||||||
"integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"tslib": {
|
|
||||||
"version": "1.11.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz",
|
|
||||||
"integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"tweetnacl": {
|
|
||||||
"version": "0.14.5",
|
|
||||||
"resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
|
|
||||||
"integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"type-fest": {
|
|
||||||
"version": "0.11.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz",
|
|
||||||
"integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"util-deprecate": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"wcwidth": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
|
|
||||||
"integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"defaults": "^1.0.3"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"wrappy": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"xtend": {
|
|
||||||
"version": "4.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
|
|
||||||
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"yauzl": {
|
|
||||||
"version": "2.10.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz",
|
|
||||||
"integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"buffer-crc32": "~0.2.3",
|
|
||||||
"fd-slicer": "~1.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"yazl": {
|
|
||||||
"version": "2.5.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz",
|
|
||||||
"integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"buffer-crc32": "~0.2.3"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
16
package.json
16
package.json
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "auto-deploy",
|
"name": "@dllcn/auto-deploy",
|
||||||
"version": "1.0.0",
|
"version": "1.1.0",
|
||||||
"description": "",
|
"description": "自动部署脚本",
|
||||||
"main": "upload.js",
|
"main": "upload.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
@ -17,12 +17,12 @@
|
||||||
"url": "https://github.com/KeiferJu/auto-deploy/issues"
|
"url": "https://github.com/KeiferJu/auto-deploy/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://github.com/KeiferJu/auto-deploy#readme",
|
"homepage": "https://github.com/KeiferJu/auto-deploy#readme",
|
||||||
"devDependencies": {
|
"dependencies": {
|
||||||
"chalk": "^3.0.0",
|
"chalk": "^4.0.0",
|
||||||
"compressing2": "^1.5.1",
|
"compressing2": "^1.5.1",
|
||||||
"inquirer": "^7.1.0",
|
"inquirer": "^7.1.0",
|
||||||
"node-ssh": "^8.0.0",
|
"node-ssh": "^10.0.2",
|
||||||
"ora": "^4.0.3",
|
"ora": "^4.0.4",
|
||||||
"shelljs": "^0.8.3"
|
"shelljs": "^0.8.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
432
upload.js
432
upload.js
|
@ -1,3 +1,5 @@
|
||||||
|
const pathHierarchy = '../../' //脚本到项目的层级 项目/node_modules/deploy-node/index.js
|
||||||
|
|
||||||
const chalk = require('chalk') //命令行颜色
|
const chalk = require('chalk') //命令行颜色
|
||||||
const ora = require('ora') // 加载流程动画
|
const ora = require('ora') // 加载流程动画
|
||||||
const spinner_style = require('./spinner_style') //加载动画样式
|
const spinner_style = require('./spinner_style') //加载动画样式
|
||||||
|
@ -7,9 +9,18 @@ const inquirer = require('inquirer') //命令行交互
|
||||||
const zipFile = require('compressing2') // 压缩zip
|
const zipFile = require('compressing2') // 压缩zip
|
||||||
const fs = require('fs') // nodejs内置文件模块
|
const fs = require('fs') // nodejs内置文件模块
|
||||||
const path = require('path') // nodejs内置路径模块
|
const path = require('path') // nodejs内置路径模块
|
||||||
const CONFIG = require('./config') // 配置
|
// const CONFIG = require('./config') // 配置
|
||||||
|
|
||||||
const SSH = new node_ssh();
|
const SSH = new node_ssh();
|
||||||
|
|
||||||
|
let CONFIG
|
||||||
|
try {
|
||||||
|
CONFIG = require(`${pathHierarchy}deploy.config.js`) // 项目配置
|
||||||
|
} catch (error) {
|
||||||
|
errorLog('请在项目根目录添加 deploy.config.js 配置文件, 参考说明文档中的配置')
|
||||||
|
process.exit() //退出流程
|
||||||
|
}
|
||||||
|
|
||||||
let config; // 用于保存 inquirer 命令行交互后选择正式|测试版的配置
|
let config; // 用于保存 inquirer 命令行交互后选择正式|测试版的配置
|
||||||
|
|
||||||
//logs
|
//logs
|
||||||
|
@ -18,248 +29,279 @@ const errorLog = log => console.log(chalk.red(`---------------- ${log} ---------
|
||||||
const successLog = log => console.log(chalk.green(`---------------- ${log} ----------------`));
|
const successLog = log => console.log(chalk.green(`---------------- ${log} ----------------`));
|
||||||
|
|
||||||
//文件夹目录
|
//文件夹目录
|
||||||
const distZipPath = path.resolve(__dirname, `./smx-bundle.tar.gz`); //打包后地址(smx-bundle.tar.gz是文件名,不需要更改, 主要在config中配置 PATH 即可)
|
const distZipPath = path.resolve(__dirname, `${pathHierarchy}smx-bundle.tar.gz`); //打包后地址(smx-bundle.tar.gz是文件名,不需要更改, 主要在config中配置 PATH 即可)
|
||||||
|
|
||||||
|
|
||||||
|
//项目打包代码 npm run build
|
||||||
//压缩代码
|
const compileDist = async () => {
|
||||||
const zipDist = async () => {
|
const loading = ora(defaultLog('项目开始打包')).start()
|
||||||
const distDir = path.resolve(__dirname, '../' + config.OUTPUT_PATH);
|
loading.spinner = spinner_style[config.LOADINGSTYLE || 'arrow4']
|
||||||
const loading = ora(defaultLog('正在压缩代码')).start();
|
shell.cd(path.resolve(__dirname, pathHierarchy))
|
||||||
loading.spinner = spinner_style.arrow4;
|
const res = await shell.exec(config.BUILD_SHELL) //执行shell 打包命令
|
||||||
try {
|
loading.stop()
|
||||||
await zipFile.tgz.compressDir(distDir, distZipPath)
|
if (res.code === 0) {
|
||||||
successLog('压缩成功!');
|
successLog('项目打包成功!')
|
||||||
} catch (error) {
|
|
||||||
errorLog(error);
|
|
||||||
errorLog('压缩失败, 退出程序!');
|
|
||||||
process.exit(); //退出流程
|
|
||||||
}
|
|
||||||
loading.stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
//连接服务器
|
|
||||||
const connectSSH = async () => {
|
|
||||||
const loading = ora(defaultLog('正在连接服务器')).start();
|
|
||||||
loading.spinner = spinner_style.arrow4;
|
|
||||||
try {
|
|
||||||
|
|
||||||
const options = config.privateKey ? {
|
|
||||||
host: config.SERVER_PATH,
|
|
||||||
username: config.SSH_USER,
|
|
||||||
privateKey: config.PRIVATE_KEY, //秘钥登录(推荐) 方式一
|
|
||||||
tryKeyboard: true,
|
|
||||||
port: config.PORT
|
|
||||||
} : {
|
|
||||||
host: config.SERVER_PATH,
|
|
||||||
username: config.SSH_USER,
|
|
||||||
password: config.PASSWORD, // 密码登录 方式二
|
|
||||||
tryKeyboard: true,
|
|
||||||
port: config.PORT
|
|
||||||
}
|
|
||||||
|
|
||||||
await SSH.connect(options);
|
|
||||||
successLog('SSH连接成功!');
|
|
||||||
} catch (error) {
|
|
||||||
errorLog(error);
|
|
||||||
errorLog('SSH连接失败!');
|
|
||||||
process.exit(); //退出流程
|
|
||||||
}
|
|
||||||
loading.stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//传送zip文件到服务器
|
|
||||||
const uploadZipBySSH = async () => {
|
|
||||||
//连接ssh
|
|
||||||
await connectSSH();
|
|
||||||
//线上目标文件清空
|
|
||||||
await clearOldFile();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const loading = ora(defaultLog('准备上传文件')).start();
|
|
||||||
loading.spinner = spinner_style.arrow4;
|
|
||||||
try {
|
|
||||||
await SSH.putFiles([{
|
|
||||||
local: distZipPath,
|
|
||||||
remote: config.PATH + '/smx-bundle.tar.gz'
|
|
||||||
}]); //local 本地 ; remote 服务器 ;
|
|
||||||
successLog('上传成功!');
|
|
||||||
loading.text = '正在解压文件';
|
|
||||||
await runCommand('tar -zxvf ./smx-bundle.tar.gz'); //解压
|
|
||||||
|
|
||||||
// 是否备份文件
|
|
||||||
if (config.BACKUP) {
|
|
||||||
await runCommand(`mv ${config.PATH}/smx-bundle.tar.gz ${config.PATH}/${config.OLD_NAME}.${new Date().toLocaleDateString()}.tar.gz`); //解压完删除线上压缩包
|
|
||||||
} else {
|
} else {
|
||||||
await runCommand(`rm -rf ${config.PATH}/smx-bundle.tar.gz`); //解压完删除线上压缩包
|
errorLog('项目打包失败, 请重试!')
|
||||||
|
process.exit() //退出流程
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//将目标目录改名
|
|
||||||
if (config.RENAME) {
|
|
||||||
await runCommand(`mv ${config.PATH}/${config.OLD_NAME} ${config.PATH}/${config.RENAME}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// 后续扩展命令
|
|
||||||
if (config.EXTENDS) {
|
|
||||||
for (let v of config.EXTENDS) {
|
|
||||||
await runCommand(v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SSH.dispose(); //断开连接
|
|
||||||
} catch (error) {
|
|
||||||
errorLog(error);
|
|
||||||
errorLog('上传失败!');
|
|
||||||
process.exit(); //退出流程
|
|
||||||
}
|
|
||||||
loading.stop();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//清空线上目标目录里的旧文件
|
/**
|
||||||
const clearOldFile = async () => {
|
* 压缩代码
|
||||||
|
* @returns {Promise<void>}
|
||||||
try {
|
*/
|
||||||
await runCommand(`rm -r ${config.PATH}/${config.OLD_NAME}`);
|
const zipDist = async () => {
|
||||||
} catch {
|
const loading = ora(defaultLog('正在压缩代码')).start();
|
||||||
// console.log('服务器未发现原始部署文档');
|
loading.spinner = spinner_style[config.LOADINGSTYLE || 'arrow4']
|
||||||
}
|
|
||||||
if (config.RENAME) {
|
|
||||||
try {
|
try {
|
||||||
await runCommand(`rm -r ${config.PATH}/${config.RENAME}`);
|
const distDir = path.resolve(__dirname, `${pathHierarchy}${config.OUTPUT_PATH}`);
|
||||||
} catch {
|
await zipFile.tgz.compressDir(distDir, distZipPath)
|
||||||
// console.log('服务器未发现原始部署文档');
|
successLog('压缩成功!');
|
||||||
|
} catch (error) {
|
||||||
|
errorLog(error);
|
||||||
|
errorLog('压缩失败, 退出程序!');
|
||||||
|
process.exit(); //退出流程
|
||||||
}
|
}
|
||||||
}
|
loading.stop();
|
||||||
|
|
||||||
if (config.CLEAR_OLDFILES) {
|
|
||||||
const commands = ['ls', 'rm -rf *'];
|
|
||||||
await Promise.all(commands.map(async (it) => {
|
|
||||||
return await runCommand(it);
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连接服务器
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
const connectSSH = async () => {
|
||||||
|
const loading = ora(defaultLog('正在连接服务器')).start();
|
||||||
|
loading.spinner = spinner_style[config.LOADINGSTYLE || 'arrow4']
|
||||||
|
|
||||||
|
|
||||||
|
const type = config.PASSWORD ? 'password' : 'privateKey'
|
||||||
|
const data = config.PASSWORD || config.PRIVATE_KEY
|
||||||
|
const opt = {
|
||||||
|
host: config.SERVER_PATH,
|
||||||
|
username: config.SSH_USER,
|
||||||
|
[type]: data,
|
||||||
|
tryKeyboard: true,
|
||||||
|
port: config.PORT
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
await SSH.connect(opt);
|
||||||
|
successLog('SSH连接成功!');
|
||||||
|
} catch (error) {
|
||||||
|
errorLog(error);
|
||||||
|
errorLog('SSH连接失败,请检查密码或者私钥以及网络状态!')
|
||||||
|
process.exit(); //退出流程
|
||||||
|
}
|
||||||
|
loading.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传前服务器文档操作
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
const clearOldFile = async () => {
|
||||||
|
try {
|
||||||
|
await runCommand(`mkdir ${config.NAME}`);
|
||||||
|
} catch (e) {
|
||||||
|
// console.log(`检索到服务器存在${config.NAME}文件夹`);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (config.BACKUP) {
|
||||||
|
const time = new Date().getTime();
|
||||||
|
try {
|
||||||
|
await runCommand(`tar -zcvf ${config.NAME}_${time}.tar.gz ${config.NAME}`);
|
||||||
|
} catch {
|
||||||
|
console.log('备份失败');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const commands = [`cd ${config.NAME} && ls`, `cd ${config.NAME} && rm -rf *`];
|
||||||
|
await Promise.all(commands.map(async (it) => {
|
||||||
|
return await runCommand(it);
|
||||||
|
}));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传文件
|
||||||
|
* @returns {Promise<void>}
|
||||||
|
*/
|
||||||
|
const uploadFiles = async () => {
|
||||||
|
// 上传文件
|
||||||
|
const loading = ora(defaultLog('准备上传文件')).start();
|
||||||
|
loading.spinner = spinner_style[config.LOADINGSTYLE || 'arrow4']
|
||||||
|
try {
|
||||||
|
await SSH.putFiles([{
|
||||||
|
local: distZipPath,
|
||||||
|
remote: `${config.PATH}/${config.NAME}/smx-bundle.tar.gz`
|
||||||
|
}]); //local 本地 ; remote 服务器 ;
|
||||||
|
successLog('上传成功!');
|
||||||
|
loading.text = '正在解压文件';
|
||||||
|
|
||||||
|
await runCommand(`cd ${config.NAME} && tar -zxvf smx-bundle.tar.gz`); //解压
|
||||||
|
|
||||||
|
|
||||||
|
await runCommand(`rm -rf ${config.PATH}/${config.NAME}/smx-bundle.tar.gz`) //解压完删除线上压缩包
|
||||||
|
//
|
||||||
|
// // 移除文件夹
|
||||||
|
await runCommand(`mv -f ${config.PATH}/${config.NAME}/${config.OLD_NAME}/* ${config.PATH}/${config.NAME}`)
|
||||||
|
await runCommand(`rm -rf ${config.PATH}/${config.NAME}/${config.OLD_NAME}`) //移出后删除 dist 文件夹
|
||||||
|
|
||||||
|
|
||||||
|
// 后续扩展命令
|
||||||
|
if (config.EXTENDS) {
|
||||||
|
for (let v of config.EXTENDS) {
|
||||||
|
await runCommand(v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SSH.dispose(); //断开连接
|
||||||
|
} catch (error) {
|
||||||
|
errorLog(error);
|
||||||
|
errorLog('上传失败!');
|
||||||
|
process.exit(); //退出流程
|
||||||
|
}
|
||||||
|
loading.stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// 删除本地上传后的打包文件
|
// 删除本地上传后的打包文件
|
||||||
const deleteFile = function async () {
|
const deleteFile = async () => {
|
||||||
delPath = distZipPath;
|
delPath = distZipPath;
|
||||||
try {
|
try {
|
||||||
/**
|
/**
|
||||||
* @des 判断文件或文件夹是否存在
|
* @des 判断文件或文件夹是否存在
|
||||||
*/
|
*/
|
||||||
if (fs.existsSync(delPath)) {
|
if (fs.existsSync(delPath)) {
|
||||||
fs.unlinkSync(delPath);
|
fs.unlinkSync(delPath);
|
||||||
} else {
|
} else {
|
||||||
console.log('inexistence path:', delPath);
|
console.log('inexistence path:', delPath);
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.log('删除本地打包文件失败', error);
|
||||||
}
|
}
|
||||||
} catch (error) {
|
|
||||||
console.log('删除本地打包文件失败', error);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 线上执行命令
|
* 线上执行命令
|
||||||
* @param {String} command 命令操作 如 ls
|
* @param {String} command 命令操作 如 ls
|
||||||
*/
|
*/
|
||||||
const runCommand = async (command) => {
|
const runCommand = async (command) => {
|
||||||
const result = await SSH.exec(command, [], {
|
const result = await SSH.exec(command, [], {
|
||||||
cwd: config.PATH
|
cwd: config.PATH
|
||||||
})
|
})
|
||||||
// defaultLog(result);
|
// defaultLog(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//传送zip文件到服务器
|
||||||
|
const uploadZipBySSH = async () => {
|
||||||
|
//连接ssh
|
||||||
|
await connectSSH();
|
||||||
|
|
||||||
|
//线上目标文件清空
|
||||||
|
await clearOldFile();
|
||||||
|
|
||||||
|
// 上传文件
|
||||||
|
await uploadFiles();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//----------------------------------------发布程序---------------------------------------------------------//
|
//----------------------------------------发布程序---------------------------------------------------------//
|
||||||
const runUploadTask = async () => {
|
const runUploadTask = async () => {
|
||||||
console.log(chalk.yellow(`---------> 欢迎使用 Sm@rtMapX前端组 自动部署工具 <---------`));
|
console.log(chalk.yellow(`---------> 欢迎使用自动部署工具 <---------`));
|
||||||
//压缩代码
|
|
||||||
await zipDist();
|
|
||||||
|
|
||||||
//连接服务器上传文件
|
//打包
|
||||||
await uploadZipBySSH();
|
if(config.BUILD_SHELL){
|
||||||
|
await compileDist()
|
||||||
|
}
|
||||||
|
|
||||||
//删除本地打包文件
|
//压缩代码
|
||||||
await deleteFile();
|
await zipDist();
|
||||||
|
|
||||||
successLog('大吉大利, 部署成功!');
|
//连接服务器上传文件
|
||||||
process.exit();
|
await uploadZipBySSH();
|
||||||
|
|
||||||
|
//删除本地打包文件
|
||||||
|
|
||||||
|
if(config.DELETE_LOCAL_PACKAGE){
|
||||||
|
await deleteFile();
|
||||||
|
}
|
||||||
|
|
||||||
|
successLog('大吉大利, 部署成功!');
|
||||||
|
process.exit();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 开始前的配置检查
|
// 开始前的配置检查
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param {Object} conf 配置对象
|
* @param {Object} conf 配置对象
|
||||||
*/
|
*/
|
||||||
const checkConfig = (conf) => {
|
const checkConfig = (conf) => {
|
||||||
const checkArr = Object.entries(conf);
|
const checkArr = Object.entries(conf);
|
||||||
checkArr.map(it => {
|
checkArr.map(it => {
|
||||||
const key = it[0];
|
const key = it[0];
|
||||||
if (key === 'PATH' && conf[key] === '/') { //上传压缩包前会清空目标目录内所有文件
|
if (key === 'PATH' && conf[key] === '/') { //上传压缩包前会清空目标目录内所有文件
|
||||||
errorLog('PATH 不能是服务器根目录!');
|
errorLog('PATH 不能是服务器根目录!');
|
||||||
process.exit(); //退出流程
|
process.exit(); //退出流程
|
||||||
}
|
}
|
||||||
if (!conf[key]) {
|
if (!conf[key] && conf[key] !== false) {
|
||||||
errorLog(`配置项 ${key} 不能为空`);
|
errorLog(`配置项 ${key} 不能为空`);
|
||||||
process.exit(); //退出流程
|
process.exit(); //退出流程
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
//--------------------------------------------------------------------------------------------------//
|
//--------------------------------------------------------------------------------------------------//
|
||||||
|
|
||||||
// 执行交互后 启动发布程序
|
// 执行交互后 启动发布程序
|
||||||
inquirer
|
inquirer
|
||||||
.prompt([{
|
.prompt([{
|
||||||
type: 'confirm',
|
type: 'confirm',
|
||||||
message: '请确认您的上传目录及修改目录(RENAME)在服务器上没有被用于存储其他数据,以下部署将会删除这些目录',
|
message: '请确认您的上传目录(NAME)是没有部署或存储过其它重要的文件',
|
||||||
name: 'confirm',
|
name: 'confirm',
|
||||||
}, {
|
|
||||||
type: 'list',
|
|
||||||
message: '选择您的部署环境',
|
|
||||||
name: 'env',
|
|
||||||
choices: [{
|
|
||||||
name: '测试环境',
|
|
||||||
value: 'development'
|
|
||||||
}, {
|
}, {
|
||||||
name: '正式环境',
|
type: 'list',
|
||||||
value: 'production'
|
message: '选择您的部署环境',
|
||||||
}],
|
name: 'env',
|
||||||
when: function (answers) { // 当watch为true的时候才会提问当前问题
|
choices: [{
|
||||||
return answers.confirm
|
name: '测试环境',
|
||||||
}
|
value: 'development'
|
||||||
}])
|
}, {
|
||||||
.then(answers => {
|
name: '正式环境',
|
||||||
if (answers.confirm) {
|
value: 'production'
|
||||||
config = CONFIG[answers.env];
|
}],
|
||||||
if (!config.OUTPUT_PATH) {
|
when: function (answers) { // 当watch为true的时候才会提问当前问题
|
||||||
config.OUTPUT_PATH = 'dist';
|
return answers.confirm
|
||||||
}
|
}
|
||||||
|
}])
|
||||||
|
.then(answers => {
|
||||||
|
if (answers.confirm) {
|
||||||
|
config = CONFIG[answers.env];
|
||||||
|
if (!config.OUTPUT_PATH) {
|
||||||
|
config.OUTPUT_PATH = 'dist';
|
||||||
|
}
|
||||||
|
|
||||||
if (!config.PORT) {
|
if (!config.PORT) {
|
||||||
config.PORT = 22;
|
config.PORT = 22;
|
||||||
}
|
}
|
||||||
|
|
||||||
const names = config.OUTPUT_PATH.split('/');
|
const names = config.OUTPUT_PATH.split('/');
|
||||||
if (names[names.length - 1]) {
|
if (names[names.length - 1]) {
|
||||||
config.OLD_NAME = names[names.length - 1];
|
config.OLD_NAME = names[names.length - 1];
|
||||||
} else {
|
} else {
|
||||||
config.OLD_NAME = names[names.length - 2];
|
config.OLD_NAME = names[names.length - 2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
checkConfig(config); // 检查
|
checkConfig(config); // 检查
|
||||||
runUploadTask(); // 发布
|
runUploadTask(); // 发布
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue