diff --git a/weex-loader/index.js b/weex-loader/index.js
index ba21e07..c9ec386 100644
--- a/weex-loader/index.js
+++ b/weex-loader/index.js
@@ -45,7 +45,10 @@
     return Promise.resolve(target);
 }
 
+var logLevel = false;
 function logWarning(loader, log) {
+    if (logLevel === false) return;
+
     if (log && log instanceof Array) {
         log.forEach(function(l) {
             loader.emitWarning(l.reason + '\t@' + l.line + ':' + l.column)
@@ -85,7 +88,7 @@
 function parseTemplate(loader, params, source, deps) {
     return new Promise(function(resolve, reject) {
         if (!templater) {
-            return reject('please use a template parser. e.g. weex-templater');
+            return reject('please use a template parser. ex. weex-templater');
         }
 
         templater.parse(source, function(err, obj) {
@@ -100,7 +103,7 @@
                         var filename = './' + dep + '.we';
                         var filepath = path.resolve(context, filename);
                         if (fs.existsSync(filepath)) {
-                            return filepath;
+                            return filename;
                         }
                     }).forEach(function(dep) {
                         if (dep) {
@@ -165,7 +168,7 @@
         var requireContent = '';
         if (deps.length) {
             requireContent += deps.map(function(dep) {
-                if (!content.match(new RegExp('require\\(["\']./' + path.basename(dep) + '["\']\\)', 'g'))) {
+                if (!content.match(new RegExp('require\\(["\']./' + path.basename(dep) + '(\.we)?["\']\\)', 'g'))) {
                     return 'require("' + dep + '");';
                 } else {
                     return '';
@@ -258,4 +261,8 @@
     templater = module;
 }
 
-module.exports = loader;
\ No newline at end of file
+loader.setLogLevel = function(level) {
+    logLevel = level
+}
+
+module.exports = loader;
diff --git a/weex-loader/package.json b/weex-loader/package.json
index f585bfa..844f3f8 100644
--- a/weex-loader/package.json
+++ b/weex-loader/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-loader",
-  "version": "0.1.1",
+  "version": "0.1.2",
   "description": "a webpack loader for weex",
   "main": "index.js",
   "author": "terrykingcha <terrykingcha@gmail.com>",
