2015-02-11 03:35:39 +03:00
|
|
|
path = require 'path'
|
|
|
|
|
|
|
|
module.exports = (grunt) ->
|
|
|
|
grunt.registerTask 'output-module-counts', 'Log modules where more than one copy exists in node_modules', ->
|
|
|
|
nodeModulesDir = path.resolve(__dirname, '..', '..', 'node_modules')
|
|
|
|
|
|
|
|
modules = {}
|
|
|
|
grunt.file.recurse nodeModulesDir, (absolutePath, rootPath, relativePath, fileName) ->
|
|
|
|
return if fileName isnt 'package.json'
|
|
|
|
|
2015-02-11 04:34:43 +03:00
|
|
|
{name, version} = grunt.file.readJSON(absolutePath)
|
|
|
|
modules[name] ?= {versions: {}, count: 0}
|
|
|
|
modules[name].count++
|
|
|
|
modules[name].versions[version] = true
|
2015-02-11 03:35:39 +03:00
|
|
|
|
|
|
|
sortedNames = Object.keys(modules).sort (name1, name2) ->
|
2015-02-11 04:34:43 +03:00
|
|
|
diff = modules[name2].count - modules[name1].count
|
2015-02-11 03:35:39 +03:00
|
|
|
diff = name1.localeCompare(name2) if diff is 0
|
|
|
|
diff
|
|
|
|
|
2015-02-11 05:54:13 +03:00
|
|
|
console.log "Total Modules: #{sortedNames.length}"
|
2015-02-11 03:35:39 +03:00
|
|
|
sortedNames.forEach (name) ->
|
2015-02-11 04:34:43 +03:00
|
|
|
{count, versions} = modules[name]
|
|
|
|
grunt.log.error "#{name}: #{count} (#{Object.keys(versions).join(', ')})" if count > 1
|