Issue #297: Adds exclude property for directories in local codebase to exclude from scanning.
diff --git a/cfg/cfg.go b/cfg/cfg.go
index 93ae060..93a309b 100644
--- a/cfg/cfg.go
+++ b/cfg/cfg.go
@@ -19,6 +19,8 @@
 //       homepage: https://www.mattfarina.com
 //     ignore:
 //     - appengine
+//     exclude:
+//     - node_modules
 //     import:
 //     - package: gopkg.in/yaml.v2
 //     - package: github.com/Masterminds/vcs
@@ -43,6 +45,8 @@
 //      owners of a security issue without filing a public bug.
 //    - ignore: A list of packages for Glide to ignore importing. These are package
 //      names to ignore rather than directories.
+//    - exclude: A list of directories in the local codebase to exclude from
+//      scanning for dependencies.
 //    - import: A list of packages to import. Each package can include:
 //        - package: The name of the package to import and the only non-optional item.
 //        - version: A semantic version, semantic version range, branch, tag, or
diff --git a/cfg/config.go b/cfg/config.go
index 88bdc71..db9297c 100644
--- a/cfg/config.go
+++ b/cfg/config.go
@@ -41,6 +41,10 @@
 	// those to skip.
 	Ignore []string `yaml:"ignore,omitempty"`
 
+	// Exclude contains a list of directories in the local application to
+	// exclude from scanning for dependencies.
+	Exclude []string `yaml:"exclude,omitempty"`
+
 	// Imports contains a list of all non-development imports for a project. For
 	// more detail on how these are captured see the Dependency type.
 	Imports Dependencies `yaml:"import"`
@@ -58,6 +62,7 @@
 	License     string       `yaml:"license,omitempty"`
 	Owners      Owners       `yaml:"owners,omitempty"`
 	Ignore      []string     `yaml:"ignore,omitempty"`
+	Exclude     []string     `yaml:"exclude,omitempty"`
 	Imports     Dependencies `yaml:"import"`
 	DevImports  Dependencies `yaml:"devimport,omitempty"`
 }
@@ -90,6 +95,7 @@
 	c.License = newConfig.License
 	c.Owners = newConfig.Owners
 	c.Ignore = newConfig.Ignore
+	c.Exclude = newConfig.Exclude
 	c.Imports = newConfig.Imports
 	c.DevImports = newConfig.DevImports
 
@@ -108,6 +114,7 @@
 		License:     c.License,
 		Owners:      c.Owners,
 		Ignore:      c.Ignore,
+		Exclude:     c.Exclude,
 	}
 	i, err := c.Imports.Clone().DeDupe()
 	if err != nil {
@@ -154,6 +161,17 @@
 	return false
 }
 
+// HasExclude returns true if the given name is listed on the exclude list.
+func (c *Config) HasExclude(ex string) bool {
+	for _, v := range c.Exclude {
+		if v == ex {
+			return true
+		}
+	}
+
+	return false
+}
+
 // Clone performs a deep clone of the Config instance
 func (c *Config) Clone() *Config {
 	n := &Config{}
@@ -163,6 +181,7 @@
 	n.License = c.License
 	n.Owners = c.Owners.Clone()
 	n.Ignore = c.Ignore
+	n.Exclude = c.Exclude
 	n.Imports = c.Imports.Clone()
 	n.DevImports = c.DevImports.Clone()
 	return n
diff --git a/dependency/resolver.go b/dependency/resolver.go
index 6c00a41..a0ba011 100644
--- a/dependency/resolver.go
+++ b/dependency/resolver.go
@@ -232,6 +232,12 @@
 		if err != nil && err != filepath.SkipDir {
 			return err
 		}
+		pt := strings.TrimPrefix(path, r.basedir+string(os.PathSeparator))
+		pt = strings.TrimSuffix(pt, string(os.PathSeparator))
+		if r.Config.HasExclude(pt) {
+			msg.Debug("Excluding %s", pt)
+			return filepath.SkipDir
+		}
 		if !fi.IsDir() {
 			return nil
 		}
diff --git a/docs/glide.yaml.md b/docs/glide.yaml.md
index 784910b..5bec302 100644
--- a/docs/glide.yaml.md
+++ b/docs/glide.yaml.md
@@ -14,6 +14,8 @@
         homepage: https://www.mattfarina.com
     ignore:
     - appengine
+    exclude:
+    - node_modules
     import:
     - package: gopkg.in/yaml.v2
     - package: github.com/Masterminds/vcs
@@ -31,6 +33,7 @@
 - license: The license is either an [SPDX license](http://spdx.org/licenses/) string or the filepath to the license. This allows automation and consumers to easily identify the license.
 - `owners`: The owners is a list of one or more owners for the project. This can be a person or organization and is useful for things like notifying the owners of a security issue without filing a public bug.
 - `ignore`: A list of packages for Glide to ignore importing. These are package names to ignore rather than directories.
+- `exclude`: A list of directories in the local codebase to exclude from scanning for dependencies.
 - `import`: A list of packages to import. Each package can include:
     - `package`: The name of the package to import and the only non-optional item. Package names follow the same patterns the `go` tool does. That means:
         - Package names that map to a VCS remote location end in .git, .bzr, .hg, or .svn. For example, `example.com/foo/pkg.git/subpkg`.