diff --git a/src/loader.js b/src/loader.js
index 0403140..8abe63d 100644
--- a/src/loader.js
+++ b/src/loader.js
@@ -348,7 +348,7 @@
 __weex_define__('@weex-component/${name}', [], function(__weex_require__, __weex_exports__, __weex_module__) {
 ` + (
   frag.script.length > 0 ? `
-    __weex_script__(__weex_require__, __weex_exports__, __weex_module__)
+    __weex_script__(__weex_module__, __weex_exports__, __weex_require__)
     if (__weex_exports__.__esModule && __weex_exports__.default) {
       __weex_module__.exports = __weex_exports__.default
     }
diff --git a/src/script.js b/src/script.js
index 423bf96..95f385a 100644
--- a/src/script.js
+++ b/src/script.js
@@ -15,20 +15,15 @@
 
       if (requireList && requireList.length > 0) {
         requireList = requireList.filter(str => {
-          if (str.indexOf('@weex-module') < 0) {
-            parsed = parsed.replace(str, '')
+          if (str.indexOf('@weex-module') > 0) {
+            parsed = parsed.replace(str, str.replace('require', '__weex_require__'))
             return true
           }
           return false
         }).join('\n')
       }
 
-      const result = `
-${requireList || ''}
-module.exports = function(require, exports, module){
-${parsed}
-}
-`
+      const result = `module.exports = function(module, exports, __weex_require__){${parsed}}`
       callback(null, result)
     }).catch(e => {
       callback(e, '')
diff --git a/test/expect/l.js b/test/expect/l.js
new file mode 100644
index 0000000..9beba40
--- /dev/null
+++ b/test/expect/l.js
@@ -0,0 +1,26 @@
+{
+  "@weex-component/77db11e29e85b11856342d968781883e": {
+    "ready": "function ready() {\n\t        modal.toast({ message: this.name });\n\t    }",
+    "data": "function data() {\n\t        return {\n\t            name: getName()\n\t        };\n\t    }",
+    "template": {
+      "type": "div",
+      "children": [
+        {
+          "type": "text",
+          "classList": [
+            "hello"
+          ],
+          "attr": {
+            "value": "function () {return 'Hello ' + (this.name)}"
+          }
+        }
+      ]
+    },
+    "style": {
+      "hello": {
+        "fontSize": 26,
+        "color": "#FF0000"
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/test/spec/getName.js b/test/spec/getName.js
new file mode 100644
index 0000000..10878a0
--- /dev/null
+++ b/test/spec/getName.js
@@ -0,0 +1,3 @@
+module.exports = function() {
+    return 'Weex'
+}
\ No newline at end of file
diff --git a/test/spec/l.we b/test/spec/l.we
new file mode 100644
index 0000000..a47501e
--- /dev/null
+++ b/test/spec/l.we
@@ -0,0 +1,31 @@
+<template>
+    <div>
+        <text class="hello">Hello {{name}}</text>
+    </div>
+</template>
+
+
+<style>
+.hello {
+    font-size: 26px;
+    color: red;
+}
+</style>
+
+
+<script>
+var modal = require('@weex-module/modal')
+var getName = require('./getName.js')
+
+
+module.exports = {
+    ready: function() {
+        modal.toast({message: this.name})
+    },
+    data: function() {
+        return {
+            name: getName()
+        }
+    }
+}
+</script>
\ No newline at end of file
diff --git a/test/test.js b/test/test.js
index 4b65f67..6725fe2 100644
--- a/test/test.js
+++ b/test/test.js
@@ -89,16 +89,16 @@
     expectActual('e');
   });
 
-  it('template via src', () => {
+  it('parted files specifed in src', () => {
     expectActual('f');
   });
 
-  it('template via requiring src and specifing alias', () => {
+  it('component by requiring src and specifing alias', () => {
     expectActual('g');
     expect(requireStub.callCount).eql(0);
   });
 
-  it('template by finding elements under same folder', () => {
+  it('component under same folder', () => {
     expectActual('h');
   });
 
@@ -119,4 +119,9 @@
     expect(requireStub.callCount).eql(1);
     expect(requireStub.firstCall.args).eql(['@weex-module/modal']);
   });
+
+  it('template and require commonjs modules', () => {
+    expectActual('l');
+    expect(requireStub.callCount).eql(1);
+  });
 })
diff --git a/test/webpack.config.js b/test/webpack.config.js
index e9f9600..5c58603 100644
--- a/test/webpack.config.js
+++ b/test/webpack.config.js
@@ -3,7 +3,7 @@
 
 var entry = {}
 var start = 'a'
-var end = 'k'
+var end = 'l'
 var count = end.charCodeAt(0) - start.charCodeAt(0)
 
 new Array(count + 1).fill(0)
