模板下载

  1. const CACHE_DIR = 'templates'
  2. /*
  3. 下载模板
  4. 1、通过项目模板API获取项目模板信息
  5. 1.1通过egg.js搭建后端系统
  6. 1.2通过npm存储项目模板
  7. 1.3将项目模板信息存储到mongoDB数据库中
  8. 1.4通过egg.js获取mongoDB的数据并通过API返回
  9. 3、选择创建组件或项目
  10. 4、获取项目的基本信息
  11. */
  12. async downloadTemplate() {
  13. const homePath = process.env.CLI_HOME_PATH
  14. const targetPath = path.resolve(homePath, CACHE_DIR)
  15. const storeDir = path.resolve(targetPath, 'node_modules')
  16. const { npmName, version } = this.templates.find(item => item.npmName === this.projectInfo.npmName)
  17. const pkg = new packages({
  18. targetPath,
  19. storeDir,
  20. packageName: npmName,
  21. packageVersion: version
  22. })
  23. if (await pkg.exists()) {
  24. //更新
  25. await pkg.update()
  26. } else {
  27. //初始化
  28. await pkg.install()
  29. }
  30. }

image.png
文件夹中可以看到
image.png

通过 spinner 实现命令行 loading 效果

  1. ...
  2. var Spinner = require('cli-spinner').Spinner
  3. function spinnerStart(msg) {
  4. var spinner = new Spinner(msg + '.. %s')
  5. spinner.setSpinnerString('|/-\\')
  6. spinner.start()
  7. return spinner
  8. }
  9. module.exports = { isObject, spinnerStart, sleep }
  1. async downloadTemplate() {
  2. ....
  3. if (await pkg.exists()) {
  4. const spinner = spinnerStart('模板更新中,请稍候')
  5. //更新
  6. await pkg.update()
  7. spinner.stop(true)
  8. } else {
  9. //初始化
  10. const spinner = spinnerStart('模板下载中,请稍候')
  11. await pkg.install()
  12. spinner.stop(true)
  13. }
  14. }