diff --git a/ts_auto_deps/updater/updater.go b/ts_auto_deps/updater/updater.go
index a866e85..359389c 100644
--- a/ts_auto_deps/updater/updater.go
+++ b/ts_auto_deps/updater/updater.go
@@ -333,7 +333,7 @@
 // updateDeps adds missing dependencies and removes unnecessary dependencies
 // for the targets in the given DependencyReports to the build rules in bld.
 // Returns true if it changed anything in the build file.
-func updateDeps(bld *build.File, reports []*arpb.DependencyReport) (bool, error) {
+func updateDeps(bld *build.File, errorOnUnresolvedImports bool, reports []*arpb.DependencyReport) (bool, error) {
 	// First, check *all* reports on whether they were successful, so that users
 	// get the complete set of errors at once.
 	var errors []AnalysisFailureCause
@@ -401,6 +401,9 @@
 			errMsg := fmt.Sprintf("ERROR in %s: unresolved imports %s.\nMaybe you are missing a "+
 				"'// from ...'' comment, or the target BUILD files are incorrect?\n%s\n",
 				fullTarget, report.UnresolvedImport, strings.Join(report.GetFeedback(), "\n"))
+			if errorOnUnresolvedImports {
+				return false, fmt.Errorf(errMsg)
+			}
 			fmt.Fprintf(os.Stderr, errMsg)
 			fmt.Fprintf(os.Stderr, "Continuing.\n")
 		}
@@ -503,10 +506,10 @@
 
 // updateBUILDAfterBazelAnalyze applies the BUILD file updates that depend on bazel
 // analyze's DependencyReports, most notably updating any rules' deps.
-func (upd *Updater) updateBUILDAfterBazelAnalyze(ctx context.Context, isRoot bool,
+func (upd *Updater) updateBUILDAfterBazelAnalyze(ctx context.Context, isRoot bool, errorOnUnresolvedImports bool,
 	g3root string, buildFilePath string, bld *build.File, reports []*arpb.DependencyReport) (bool, error) {
 	platform.Infof("Updating deps")
-	updatedBuild, err := updateDeps(bld, reports)
+	updatedBuild, err := updateDeps(bld, errorOnUnresolvedImports, reports)
 	if err != nil {
 		return false, err
 	}
@@ -566,6 +569,10 @@
 	// IsRoot indicates that the directory is a project's root directory, so a tsconfig
 	// rule should be created.
 	IsRoot bool
+	// ErrorOnUnresolvedImports indicates to ts_auto_deps that it should fail when it's unable
+	// to resolve the package for an import instead of printing a warning and continuing
+	// assuming the the user manually added an import to their BUILD for it.
+	ErrorOnUnresolvedImports bool
 }
 
 // UpdateBUILD drives the main process of creating/updating the BUILD file
@@ -606,7 +613,7 @@
 		return false, err
 	}
 
-	changedAfterBazelAnalyze, err := upd.updateBUILDAfterBazelAnalyze(ctx, options.IsRoot, g3root, buildFilePath, bld, reports)
+	changedAfterBazelAnalyze, err := upd.updateBUILDAfterBazelAnalyze(ctx, options.IsRoot, options.ErrorOnUnresolvedImports, g3root, buildFilePath, bld, reports)
 	return changed || changedAfterBazelAnalyze, err
 }
 
diff --git a/ts_auto_deps/updater/updater_test.go b/ts_auto_deps/updater/updater_test.go
index a063a03..c8d1e9b 100644
--- a/ts_auto_deps/updater/updater_test.go
+++ b/ts_auto_deps/updater/updater_test.go
@@ -2,6 +2,7 @@
 
 import (
 	"context"
+	"fmt"
 	"io/ioutil"
 	"os"
 	"path/filepath"
@@ -213,7 +214,7 @@
 		if err != nil {
 			t.Errorf("parse %s after failed: %s", tst.name, err)
 		}
-		changed, err := updateDeps(bld, []*arpb.DependencyReport{report})
+		changed, err := updateDeps(bld, false, []*arpb.DependencyReport{report})
 		if err != nil {
 			t.Errorf("update %s failed: %s", tst.name, err)
 		}
@@ -228,6 +229,45 @@
 	}
 }
 
+func TestUnresolvedImportError(t *testing.T) {
+	report := parseReport(t, `
+			rule: "//foo:bar"
+			unresolved_import: "unresolved/import"`)
+
+	bld, err := build.ParseBuild("foo/BUILD", []byte(`ts_library(
+					name = "bar",
+					srcs = ["hello.ts"],
+			)`))
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	tests := []struct {
+		name                     string
+		errorOnUnresolvedImports bool
+		err                      error
+	}{
+		{
+			name:                     "Error",
+			errorOnUnresolvedImports: true,
+			err: fmt.Errorf("ERROR in %s: unresolved imports %s.\nMaybe you are missing a "+
+				"'// from ...'' comment, or the target BUILD files are incorrect?\n\n", "//foo:bar", []string{"unresolved/import"}),
+		},
+		{
+			name:                     "Warn",
+			errorOnUnresolvedImports: false,
+			err:                      nil,
+		},
+	}
+
+	for _, tst := range tests {
+		_, err = updateDeps(bld, tst.errorOnUnresolvedImports, []*arpb.DependencyReport{report})
+		if !reflect.DeepEqual(err, tst.err) {
+			t.Errorf("update %s returned error %s: expected %s", tst.name, err, tst.err)
+		}
+	}
+}
+
 func TestDottedCall(t *testing.T) {
 	// Repro for a crash, b/35389044
 	buildText := `foo.bar("baz")`
