diff --git a/weex-loader/index.js b/weex-loader/index.js
index e7c0252..ba21e07 100644
--- a/weex-loader/index.js
+++ b/weex-loader/index.js
@@ -18,7 +18,7 @@
 
 function parseScript(loader, params, source, config, data) {
     if (!scripter) {
-        return Promise.reject('please use a script parser. ex. weex-scripter');
+        return Promise.reject('please use a script parser. e.g. weex-scripter');
     }
 
     var target = scripter.fix(source);
@@ -38,7 +38,7 @@
 
     if (params.resourceQuery.entry === true) {
         target += '\n;__weex_bootstrap__("@weex-component/' + name + '", ' + 
-                    String(config) + ', ' + 
+                    String(config) + ',' + 
                     String(data) + ')';
     }
 
@@ -56,7 +56,7 @@
 function parseStyle(loader, params, source) {
     return new Promise(function(resolve, reject) {
         if (!styler) {
-            return reject('please use a style parser. ex. weex-styler');
+            return reject('please use a style parser. e.g. weex-styler');
         }
 
         styler.parse(source, function(err, obj) {
@@ -85,7 +85,7 @@
 function parseTemplate(loader, params, source, deps) {
     return new Promise(function(resolve, reject) {
         if (!templater) {
-            return reject('please use a template parser. ex. weex-styler');
+            return reject('please use a template parser. e.g. weex-templater');
         }
 
         templater.parse(source, function(err, obj) {
@@ -184,13 +184,14 @@
         }
 
         if (results.config) {
-            config = JSON.parse(results.config.content);
+            config = new Function('return ' + results.config.content.replace(/\n/g, ''))();
         }
         config.transformerVersion = transformerVersion;
-        config = JSON.stringify(config);
+        config = JSON.stringify(config, null, '  ');
 
         if (results.data) {
-            data = results.data.content;
+            data = new Function('return ' + results.data.content.replace(/\n/g, ''))();
+            data = JSON.stringify(data, null, ' ');
         }
         
         return parseScript(loader, params, content, config, data);
diff --git a/weex-loader/test/actual/a.js b/weex-loader/test/actual/a.js
index 90ab242..2bae027 100644
--- a/weex-loader/test/actual/a.js
+++ b/weex-loader/test/actual/a.js
@@ -61,7 +61,7 @@
 	__weex_module__.exports.style = __webpack_require__(7);
 	__weex_module__.exports.template = __webpack_require__(8);
 	})
-	;__weex_bootstrap__("@weex-component/48c34d39ea9ced4ad5f95df361368f61", {"transformerVersion":"0.3.1"}, undefined)
+	;__weex_bootstrap__("@weex-component/48c34d39ea9ced4ad5f95df361368f61", {"transformerVersion":"0.3.1"},undefined)
 
 /***/ },
 /* 1 */
diff --git a/weex-loader/test/actual/z.js b/weex-loader/test/actual/z.js
new file mode 100644
index 0000000..9e78aee
--- /dev/null
+++ b/weex-loader/test/actual/z.js
@@ -0,0 +1,69 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ 	// The module cache
+/******/ 	var installedModules = {};
+
+/******/ 	// The require function
+/******/ 	function __webpack_require__(moduleId) {
+
+/******/ 		// Check if module is in cache
+/******/ 		if(installedModules[moduleId])
+/******/ 			return installedModules[moduleId].exports;
+
+/******/ 		// Create a new module (and put it into the cache)
+/******/ 		var module = installedModules[moduleId] = {
+/******/ 			exports: {},
+/******/ 			id: moduleId,
+/******/ 			loaded: false
+/******/ 		};
+
+/******/ 		// Execute the module function
+/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ 		// Flag the module as loaded
+/******/ 		module.loaded = true;
+
+/******/ 		// Return the exports of the module
+/******/ 		return module.exports;
+/******/ 	}
+
+
+/******/ 	// expose the modules object (__webpack_modules__)
+/******/ 	__webpack_require__.m = modules;
+
+/******/ 	// expose the module cache
+/******/ 	__webpack_require__.c = installedModules;
+
+/******/ 	// __webpack_public_path__
+/******/ 	__webpack_require__.p = "";
+
+/******/ 	// Load entry module and return exports
+/******/ 	return __webpack_require__(0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ function(module, exports) {
+
+	;__weex_define__("@weex-component/060e94206c8ea81edded49ff8b7ca324", [], function(__weex_require__, __weex_exports__, __weex_module__){
+
+	;__weex_module__.exports.template={
+	  "type": "div"
+	}
+	})
+	;__weex_bootstrap__("@weex-component/060e94206c8ea81edded49ff8b7ca324", {
+	  "downgrade": {
+	    "ios": {
+	      "appVersion": ">=13.0.0"
+	    },
+	    "android": {
+	      "appVersion": "<=0.0.0"
+	    }
+	  },
+	  "transformerVersion": "0.3.1"
+	},{
+	 "a": 1,
+	 "b": 2
+	})
+
+/***/ }
+/******/ ]);
\ No newline at end of file
diff --git a/weex-loader/test/expect/z.js b/weex-loader/test/expect/z.js
new file mode 100644
index 0000000..501df2e
--- /dev/null
+++ b/weex-loader/test/expect/z.js
@@ -0,0 +1,14 @@
+define('@weex-component/z', function (require, exports, module) {
+
+;
+
+;module.exports.style = {}
+
+;module.exports.template = {
+  "type": "div"
+}
+
+;})
+
+// require module
+bootstrap('@weex-component/z', {"downgrade":{"ios":{"appVersion":">=13.0.0"},"android":{"appVersion":"<=0.0.0"}},"transformerVersion":"0.3.0"}, {"a":1,"b":2})
\ No newline at end of file
diff --git a/weex-loader/test/expect/z.we b/weex-loader/test/expect/z.we
new file mode 100644
index 0000000..b5b35d9
--- /dev/null
+++ b/weex-loader/test/expect/z.we
@@ -0,0 +1,23 @@
+<template>
+    <div></div>
+</template>
+
+<script type="data">
+{
+    a: 1,
+    b: 2
+}
+</script>
+
+<script type="config">
+{
+    downgrade:{
+        ios: {
+            appVersion: '>=13.0.0'
+        },
+        android: {
+            appVersion: '<=0.0.0'
+        }
+    }
+}
+</script>
\ No newline at end of file
diff --git a/weex-loader/test/test.js b/weex-loader/test/test.js
index 861798a..e22726a 100644
--- a/weex-loader/test/test.js
+++ b/weex-loader/test/test.js
@@ -39,4 +39,23 @@
 
     expect(actualJson).eql(expectJson);
   });
+
+  it('with config & data case', function() {
+    var name = 'z.js';
+
+    var actualCodePath = path.resolve(__dirname, 'actual', name);
+    var actualCodeContent = fs.readFileSync(actualCodePath);
+
+    var expectCodePath = path.resolve(__dirname, 'expect', name);
+    var expectCodeContent = fs.readFileSync(expectCodePath);
+
+
+    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);
+  });
 })
\ No newline at end of file
diff --git a/weex-loader/webpack.config.js b/weex-loader/webpack.config.js
index 9beae50..6cf76bf 100644
--- a/weex-loader/webpack.config.js
+++ b/weex-loader/webpack.config.js
@@ -10,10 +10,13 @@
 loader.useTemplater(templater);
 
 module.exports = {
-  entry: './test/a.js?entry=true',
+  entry: {
+    a: './test/a.js?entry=true',
+    z: './test/expect/z.we?entry=true'
+  },
   output: {
     path: './test/actual',
-    filename: 'a.js'
+    filename: '[name].js'
   },
   module: {
     loaders: [
