UNPKG

npb-coffee

Version:

An auxiliary tool to help developer build node project more convenient.

148 lines (126 loc) 3.57 kB
echo = console.log {join} = require 'path' {PWD} = process.env {exit} = process fs = require 'fs' fse = require 'fs-extra' del = require 'del' {error} = console _ = require 'lodash' Thenjs = require 'thenjs' { status } = require '../libs/config' step = 'Uninstalled' get_config = (config) -> bower_keep_list = config.bower_deps.keep_list config = npm: config.npm_deps bower: config.bower_deps.deps_conf config.npm.dest = join PWD, status[step].npm_dir config.bower.dest = join PWD, status[step].bower_dir config.bower.keep_list = bower_keep_list config get_installed_pkgnames = (config) -> dest = npm: config.npm.dest bower: config.bower.dest installed_pkgs = {} for name, path of dest installed_pkgs[name] = if fs.existsSync path then _.without ( fse.readdirSync path ), '.bin' else [] installed_pkgs group_dep_devdep = (wait_list, dep_list, dev_dep_list) -> result = dependencies: [] devDependencies: [] for pkgname in wait_list index_dep = _.findIndex dep_list, (dep_pkg) -> dep_pkg is pkgname index_dev_dep = _.findIndex dev_dep_list, (dev_dep_pkg) -> dev_dep_pkg is pkgname if index_dep >= 0 result.dependencies.push pkgname continue else if index_dev_dep >= 0 result.devDependencies.push pkgname continue else continue result get_wait_list = (config, installed_pkgs) -> deps = npm: [] bower: [] deps.npm = _.union deps.npm , config.npm.dependencies , config.npm.devDependencies deps.bower = _.union deps.bower , config.bower.dependencies , config.bower.devDependencies wait_list = npm: _.difference deps.npm, installed_pkgs.npm bower: _.difference deps.bower, installed_pkgs.bower install: npm: group_dep_devdep wait_list.npm , config.npm.dependencies , config.npm.devDependencies bower: group_dep_devdep wait_list.bower , config.bower.dependencies , config.bower.devDependencies clean: npm: _.difference installed_pkgs.npm, deps.npm bower: _.difference installed_pkgs.bower, deps.bower count_install_pkgs = (wait_install_pkgs) -> count = 0 for npm_or_bower in [ 'npm' 'bower' ] for dep_or_devdep in [ 'dependencies' 'devDependencies' ] count += wait_install_pkgs[npm_or_bower][dep_or_devdep].length count cleanDir = (dir) -> return unless fs.statSync(dir).isDirectory() for file in fs.readdirSync dir fse.removeSync ( join dir, file ) moveFiles = (filenames, src_dir, dest_dir) -> cleanDir dest_dir for filename in filenames src_file = join src_dir, filename dest_file = join dest_dir, filename fse.copySync src_file, dest_file handle_back_bower = (keep_list) -> { dest keep_list } = keep_list # ensure tmp dir tmp_path = join PWD, '.tmp' fse.ensureDirSync tmp_path for pkgname, pkgfiles of keep_list # except keep all the files continue if pkgfiles is '' # single file to array pkgfiles = [pkgfiles] if _.isString pkgfiles pkg_parent_path = join dest, pkgname # move to tmp dir # TODO filter css/font/js and others moveFiles pkgfiles, pkg_parent_path, tmp_path # move back moveFiles pkgfiles, tmp_path, pkg_parent_path fse.removeSync tmp_path exports.get_config = get_config exports.get_wait_list = (config) -> installed_pkgs = get_installed_pkgnames config get_wait_list config, installed_pkgs exports.count_install_pkgs = count_install_pkgs exports.handle_back_bower = handle_back_bower