Merge pull request #5 from weexteam/hotfix-ignore-same-name

Hotfix ignore same name
diff --git a/package.json b/package.json
index 027a8ec..1c99ba4 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
   "name": "weex-loader",
-  "version": "0.2.1",
+  "version": "0.2.3",
   "description": "a webpack loader for weex",
   "main": "index.js",
   "author": "terrykingcha <terrykingcha@gmail.com>",
diff --git a/src/parser.js b/src/parser.js
index 03b9a80..cb16ad0 100644
--- a/src/parser.js
+++ b/src/parser.js
@@ -14,6 +14,7 @@
   getNameByPath,
   checkFileExist,
   depHasRequired,
+  parseElementNameByPath,
   stringifyFunction,
   appendToWarn
 } from './util'
@@ -121,7 +122,14 @@
 
     let requireContent = ''
     if (deps.length) {
-      requireContent += deps.map(dep =>
+      const entryElementName = parseElementNameByPath(params.resourcePath)
+      requireContent += deps.filter(dep => {
+        if (parseElementNameByPath(dep) === entryElementName) {
+          console.warn(`[Warn]: "${dep}" cannot include <${entryElementName}> itself.`)
+          return false
+        }
+        return true
+      }).map(dep =>
         depHasRequired(content, dep) ? 'require("' + dep + '");' : ''
       ).join('\n')
       if (requireContent) {
@@ -232,7 +240,7 @@
       .replace(MODULE_EXPORTS_REG, '__weex_module__.exports')
       .replace(REQUIRE_REG, '__weex_require__($1$2$1)')
   target = ';__weex_define__("@weex-component/' + name + '", [], ' +
-      'function(__weex_require__, __weex_exports__, __weex_module__)' +
+      'function(__weex_require__, exports, __weex_module__)' +
       '{\n' + target + '\n})'
 
   // record mapOffset into sourcemap
@@ -255,4 +263,3 @@
 
   return Promise.resolve(prefix + target)
 }
-
diff --git a/src/util.js b/src/util.js
index d631779..629f1e3 100644
--- a/src/util.js
+++ b/src/util.js
@@ -44,3 +44,7 @@
 export function depHasRequired (content, dep) {
   return !content.match(new RegExp('require\\(["\']./' + path.basename(dep) + '(.we)?["\']\\)', 'g'))
 }
+
+export function parseElementNameByPath (filepath) {
+  return path.parse(filepath).name
+}
diff --git a/test/expect/exports.we b/test/expect/exports.we
new file mode 100644
index 0000000..731b20a
--- /dev/null
+++ b/test/expect/exports.we
@@ -0,0 +1,11 @@
+<template>
+  <div>
+    <text>{{foo}}</text>
+  </div>
+</template>
+
+<script>
+  exports.data = {
+    foo: 'Hello'
+  }
+</script>
diff --git a/test/expect/samename.we b/test/expect/samename.we
new file mode 100644
index 0000000..9020bf9
--- /dev/null
+++ b/test/expect/samename.we
@@ -0,0 +1,3 @@
+<template>
+  <samename></samename>
+</template>
diff --git a/test/test.js b/test/test.js
index e2a616d..fb27960 100644
--- a/test/test.js
+++ b/test/test.js
@@ -81,6 +81,16 @@
     expect(actualJson).eql(expectJson);
   });
 
+  it('ignore include same name element file', function() {
+    var name = 'samename.js';
+
+    var actualCodePath = path.resolve(__dirname, 'actual', name);
+    var actualCodeContent = fs.readFileSync(actualCodePath, { encoding: 'utf8' });
+
+    var matches = actualCodeContent.match(/"type"\: "samename"/g)
+    expect(matches.length).eql(1);
+  });
+
   it('support source map', function() {
     var name = 'sourcemap'
 
@@ -129,4 +139,23 @@
     checkPos(/console\.log\(9\)/)
     checkPos(/console\.log\(0\)/)
   })
+
+  it('exports case', function() {
+    var name = 'exports.js';
+
+    var actualCodePath = path.resolve(__dirname, 'actual', name);
+    var actualCodeContent = fs.readFileSync(actualCodePath, { encoding: 'utf8' });
+
+    var expectCodePath = path.resolve(__dirname, 'expect', name);
+    var expectCodeContent = fs.readFileSync(expectCodePath, { encoding: 'utf8' });
+
+
+    var actualResult = createInstance('actual/' + name, actualCodeContent);
+    var actualJson = getRoot('actual/' + name);
+
+    var expectResult = createInstance('expect/' + name, expectCodeContent);
+    var expectJson = getRoot('expect/' + name);
+
+    expect(actualJson).eql(expectJson);
+  });
 })
diff --git a/test/webpack.config.js b/test/webpack.config.js
index 68792f3..5266dae 100644
--- a/test/webpack.config.js
+++ b/test/webpack.config.js
@@ -3,6 +3,8 @@
 module.exports = {
   entry: {
     sourcemap: path.resolve(__dirname, 'expect/sourcemap.we?entry=true'),
+    samename: path.resolve(__dirname, 'expect/samename.we?entry=true'),
+    exports: path.resolve(__dirname, 'expect/exports.we?entry=true'),
     a: path.resolve(__dirname, 'a.js?entry=true'),
     b: path.resolve(__dirname, 'expect/b.we?entry=true'),
     z: path.resolve(__dirname, 'expect/z.we?entry=true')
@@ -26,15 +28,15 @@
         loaders: ['index.js?type=script', 'babel?presets[]=es2015']
       },
       {
-        test: /\.css(\?[^?]+)?$/, 
+        test: /\.css(\?[^?]+)?$/,
         loaders: ['index.js?type=style']
       },
       {
-        test: /\.less(\?[^?]+)?$/, 
+        test: /\.less(\?[^?]+)?$/,
         loaders: ['index.js?type=style', 'less']
       },
       {
-        test: /\.tpl(\?[^?]+)?$/, 
+        test: /\.tpl(\?[^?]+)?$/,
         loaders: ['index.js?type=tpl']
       }
     ]