diff --git a/.travis.yml b/.travis.yml
index 5f1136178..ca376afba 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -14,8 +14,9 @@ install:
- yarn lint
- yarn add $TYPESCRIPT
env:
- - TYPESCRIPT=typescript@3.3.3
+ - TYPESCRIPT=typescript@3.4.1
- TYPESCRIPT=typescript@next
+ - TYPESCRIPT=typescript@3.3.3
- TYPESCRIPT=typescript@3.2.1
- TYPESCRIPT=typescript@3.1.1
- TYPESCRIPT=typescript@3.0.1
diff --git a/appveyor.yml b/appveyor.yml
index 66aaee4f0..c3f16c277 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -3,8 +3,9 @@ environment:
FORCE_COLOR: 1
nodejs_version: "10"
matrix:
- - TYPESCRIPT: typescript@3.3.3
+ - TYPESCRIPT: typescript@3.4.1
- TYPESCRIPT: typescript@next
+ - TYPESCRIPT: typescript@3.3.3
- TYPESCRIPT: typescript@3.2.1
- TYPESCRIPT: typescript@3.1.1
- TYPESCRIPT: typescript@3.0.1
diff --git a/test/comparison-tests/aliasResolution/expectedOutput-3.4/bundle.js b/test/comparison-tests/aliasResolution/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..02dd408f1
--- /dev/null
+++ b/test/comparison-tests/aliasResolution/expectedOutput-3.4/bundle.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar myComponent = __webpack_require__(/*! components/myComponent */ \"./common/components/myComponent.ts\");\nconsole.log(myComponent);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./common/components/myComponent.ts":
+/*!******************************************!*\
+ !*** ./common/components/myComponent.ts ***!
+ \******************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nmodule.exports = 'myComponent';\n\n\n//# sourceURL=webpack:///./common/components/myComponent.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/aliasResolution/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/aliasResolution/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..7daafbd66
--- /dev/null
+++ b/test/comparison-tests/aliasResolution/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.33 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 120 bytes {main} [built]
+[./common/components/myComponent.ts] 46 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/aliasResolution/expectedOutput-3.4/output.txt b/test/comparison-tests/aliasResolution/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..6e83ffe49
--- /dev/null
+++ b/test/comparison-tests/aliasResolution/expectedOutput-3.4/output.txt
@@ -0,0 +1,10 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.33 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 120 bytes {main} [built] [1 error]
+[./common/components/myComponent.ts] 46 bytes {main} [built]
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(2,31)[39m[22m
+[1m[31m TS2307: Cannot find module 'components/myComponent2'.[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/aliasResolution/expectedOutput-3.4/patch0/bundle.js b/test/comparison-tests/aliasResolution/expectedOutput-3.4/patch0/bundle.js
new file mode 100644
index 000000000..9ee46fa6a
--- /dev/null
+++ b/test/comparison-tests/aliasResolution/expectedOutput-3.4/patch0/bundle.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar myComponent = __webpack_require__(/*! components/myComponent */ \"./common/components/myComponent.ts\");\nconsole.log(myComponent);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./common/components/myComponent.ts":
+/*!******************************************!*\
+ !*** ./common/components/myComponent.ts ***!
+ \******************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nmodule.exports = 'changed it';\n\n\n//# sourceURL=webpack:///./common/components/myComponent.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/aliasResolution/expectedOutput-3.4/patch0/output.transpiled.txt b/test/comparison-tests/aliasResolution/expectedOutput-3.4/patch0/output.transpiled.txt
new file mode 100644
index 000000000..7eb8b346a
--- /dev/null
+++ b/test/comparison-tests/aliasResolution/expectedOutput-3.4/patch0/output.transpiled.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.33 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 120 bytes {main}
+[./common/components/myComponent.ts] 45 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/aliasResolution/expectedOutput-3.4/patch0/output.txt b/test/comparison-tests/aliasResolution/expectedOutput-3.4/patch0/output.txt
new file mode 100644
index 000000000..62d617c97
--- /dev/null
+++ b/test/comparison-tests/aliasResolution/expectedOutput-3.4/patch0/output.txt
@@ -0,0 +1,10 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.33 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 120 bytes {main} [built] [1 error]
+[./common/components/myComponent.ts] 45 bytes {main} [built]
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(2,31)[39m[22m
+[1m[31m TS2307: Cannot find module 'components/myComponent2'.[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/allowJs-entryFileIsJs/expectedOutput-3.4/bundle.js b/test/comparison-tests/allowJs-entryFileIsJs/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..7a2725d4e
--- /dev/null
+++ b/test/comparison-tests/allowJs-entryFileIsJs/expectedOutput-3.4/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./src/index.js");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./src/index.js":
+/*!**********************!*\
+ !*** ./src/index.js ***!
+ \**********************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("console.log('working');\n\n\n//# sourceURL=webpack:///./src/index.js?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/allowJs-entryFileIsJs/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/allowJs-entryFileIsJs/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..b3840f220
--- /dev/null
+++ b/test/comparison-tests/allowJs-entryFileIsJs/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,5 @@
+Built at: 2018-4-7 18:30:32
+ Asset Size Chunks Chunk Names
+bundle.js 2.83 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./src/index.js] 24 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/allowJs-entryFileIsJs/expectedOutput-3.4/output.txt b/test/comparison-tests/allowJs-entryFileIsJs/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..debec2de1
--- /dev/null
+++ b/test/comparison-tests/allowJs-entryFileIsJs/expectedOutput-3.4/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.79 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./src/index.js] 24 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/appendSuffixTo/expectedOutput-3.4/bundle.js b/test/comparison-tests/appendSuffixTo/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..0ba1a6811
--- /dev/null
+++ b/test/comparison-tests/appendSuffixTo/expectedOutput-3.4/bundle.js
@@ -0,0 +1,125 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./index.vue");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./component.vue":
+/*!***********************!*\
+ !*** ./component.vue ***!
+ \***********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nexports[\"default\"] = {\n data: function () {\n return {\n msg: \"component\"\n };\n }\n};\n\n\n//# sourceURL=webpack:///./component.vue?");
+
+/***/ }),
+
+/***/ "./helper.ts":
+/*!*******************!*\
+ !*** ./helper.ts ***!
+ \*******************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nfunction myMethod() {\n console.log('from helper!');\n}\nexports.myMethod = myMethod;\n\n\n//# sourceURL=webpack:///./helper.ts?");
+
+/***/ }),
+
+/***/ "./index.vue":
+/*!*******************!*\
+ !*** ./index.vue ***!
+ \*******************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar component_vue_1 = __webpack_require__(/*! ./component.vue */ \"./component.vue\");\nvar helper_1 = __webpack_require__(/*! ./helper */ \"./helper.ts\");\nexports[\"default\"] = {\n components: { component: component_vue_1[\"default\"] },\n data: function () {\n return {\n msg: \"world\"\n };\n },\n method: {\n myMethod: helper_1.myMethod\n }\n};\n\n\n//# sourceURL=webpack:///./index.vue?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/appendSuffixTo/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/appendSuffixTo/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..38ade0cf7
--- /dev/null
+++ b/test/comparison-tests/appendSuffixTo/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,7 @@
+Built at: 2018-4-7 18:30:42
+ Asset Size Chunks Chunk Names
+bundle.js 4.04 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./component.vue] 154 bytes {main} [built]
+[./helper.ts] 127 bytes {main} [built]
+[./index.vue] 352 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/appendSuffixTo/expectedOutput-3.4/output.txt b/test/comparison-tests/appendSuffixTo/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..41b694f81
--- /dev/null
+++ b/test/comparison-tests/appendSuffixTo/expectedOutput-3.4/output.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 5 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./component.vue] 154 bytes {main} [built]
+[./helper.ts] 127 bytes {main} [built]
+[./index.vue] 352 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/appendSuffixToWatch/expectedOutput-3.4/bundle.entry1.js b/test/comparison-tests/appendSuffixToWatch/expectedOutput-3.4/bundle.entry1.js
new file mode 100644
index 000000000..ba42f5993
--- /dev/null
+++ b/test/comparison-tests/appendSuffixToWatch/expectedOutput-3.4/bundle.entry1.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./entry1.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./entry1.ts":
+/*!*******************!*\
+ !*** ./entry1.ts ***!
+ \*******************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("console.log('banana');\n\n\n//# sourceURL=webpack:///./entry1.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/appendSuffixToWatch/expectedOutput-3.4/bundle.entry2.js b/test/comparison-tests/appendSuffixToWatch/expectedOutput-3.4/bundle.entry2.js
new file mode 100644
index 000000000..63c756585
--- /dev/null
+++ b/test/comparison-tests/appendSuffixToWatch/expectedOutput-3.4/bundle.entry2.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./entry2.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./component.vue":
+/*!***********************!*\
+ !*** ./component.vue ***!
+ \***********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nexports[\"default\"] = \"some value\";\n\n\n//# sourceURL=webpack:///./component.vue?");
+
+/***/ }),
+
+/***/ "./entry2.ts":
+/*!*******************!*\
+ !*** ./entry2.ts ***!
+ \*******************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar component_vue_1 = __webpack_require__(/*! ./component.vue */ \"./component.vue\");\nconsole.log(component_vue_1[\"default\"]);\n\n\n//# sourceURL=webpack:///./entry2.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/appendSuffixToWatch/expectedOutput-3.4/output.txt b/test/comparison-tests/appendSuffixToWatch/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..bdc1dc671
--- /dev/null
+++ b/test/comparison-tests/appendSuffixToWatch/expectedOutput-3.4/output.txt
@@ -0,0 +1,8 @@
+ Asset Size Chunks Chunk Names
+bundle.entry1.js 3.78 KiB entry1 [emitted] entry1
+bundle.entry2.js 4.29 KiB entry2 [emitted] entry2
+Entrypoint entry1 = bundle.entry1.js
+Entrypoint entry2 = bundle.entry2.js
+[./component.vue] 76 bytes {entry2} [built]
+[./entry1.ts] 23 bytes {entry1} [built]
+[./entry2.ts] 132 bytes {entry2} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/appendSuffixToWatch/expectedOutput-3.4/patch0/bundle.entry1.js b/test/comparison-tests/appendSuffixToWatch/expectedOutput-3.4/patch0/bundle.entry1.js
new file mode 100644
index 000000000..9e8bbeb9a
--- /dev/null
+++ b/test/comparison-tests/appendSuffixToWatch/expectedOutput-3.4/patch0/bundle.entry1.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./entry1.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./entry1.ts":
+/*!*******************!*\
+ !*** ./entry1.ts ***!
+ \*******************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("console.log('something!');\n\n\n//# sourceURL=webpack:///./entry1.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/appendSuffixToWatch/expectedOutput-3.4/patch0/output.txt b/test/comparison-tests/appendSuffixToWatch/expectedOutput-3.4/patch0/output.txt
new file mode 100644
index 000000000..06e6f0dfe
--- /dev/null
+++ b/test/comparison-tests/appendSuffixToWatch/expectedOutput-3.4/patch0/output.txt
@@ -0,0 +1,8 @@
+ Asset Size Chunks Chunk Names
+bundle.entry1.js 3.78 KiB entry1 [emitted] entry1
+bundle.entry2.js 4.29 KiB entry2 entry2
+Entrypoint entry1 = bundle.entry1.js
+Entrypoint entry2 = bundle.entry2.js
+[./component.vue] 76 bytes {entry2}
+[./entry1.ts] 27 bytes {entry1} [built]
+[./entry2.ts] 132 bytes {entry2}
\ No newline at end of file
diff --git a/test/comparison-tests/babel-es6resolveParent/expectedOutput-3.4/bundle.js b/test/comparison-tests/babel-es6resolveParent/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..172f02325
--- /dev/null
+++ b/test/comparison-tests/babel-es6resolveParent/expectedOutput-3.4/bundle.js
@@ -0,0 +1,101 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./index.tsx");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./index.tsx":
+/*!*******************!*\
+ !*** ./index.tsx ***!
+ \*******************/
+/*! exports provided: BaseComponent */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BaseComponent\", function() { return BaseComponent; });\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar BaseComponent = function BaseComponent() {\n _classCallCheck(this, BaseComponent);\n};\n\n//# sourceURL=webpack:///./index.tsx?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/babel-es6resolveParent/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/babel-es6resolveParent/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..88cf02733
--- /dev/null
+++ b/test/comparison-tests/babel-es6resolveParent/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,5 @@
+Built at: 2018-4-7 18:31:01
+ Asset Size Chunks Chunk Names
+bundle.js 3.26 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./index.tsx] 251 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/babel-es6resolveParent/expectedOutput-3.4/output.txt b/test/comparison-tests/babel-es6resolveParent/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..10cdd525e
--- /dev/null
+++ b/test/comparison-tests/babel-es6resolveParent/expectedOutput-3.4/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.22 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./index.tsx] 251 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/babel-issue81/expectedOutput-3.4/bundle.js b/test/comparison-tests/babel-issue81/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..6d304b239
--- /dev/null
+++ b/test/comparison-tests/babel-issue81/expectedOutput-3.4/bundle.js
@@ -0,0 +1,119 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./a.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./a.ts":
+/*!**************!*\
+ !*** ./a.ts ***!
+ \**************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var __decorate = this && this.__decorate || function (decorators, target, key, desc) {
+ var c = arguments.length,
+ r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc,
+ d;
+ if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) {
+ if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
+ }return c > 3 && r && Object.defineProperty(target, key, r), r;
+};
+function bar(target) {
+ return target;
+}
+var Foo = function Foo() {
+ _classCallCheck(this, Foo);
+};
+Foo = __decorate([bar], Foo);
+
+/***/ })
+
+/******/ });
+//# sourceMappingURL=bundle.js.map
\ No newline at end of file
diff --git a/test/comparison-tests/babel-issue81/expectedOutput-3.4/bundle.js.map b/test/comparison-tests/babel-issue81/expectedOutput-3.4/bundle.js.map
new file mode 100644
index 000000000..3e468fb7b
--- /dev/null
+++ b/test/comparison-tests/babel-issue81/expectedOutput-3.4/bundle.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./a.ts"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;;;;;;;;;;;;;ACjFA,SAAY,IAAY;AACpB,WACJ;AAAC;AAGD;AAEC;;AAFQ,kBADL,MAGH,K","file":"bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./a.ts\");\n","\nfunction bar(target: any) {\n return target;\n}\n\n@bar\nclass Foo {\n \n}"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test/comparison-tests/babel-issue81/expectedOutput-3.4/output.txt b/test/comparison-tests/babel-issue81/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..fa5003ee3
--- /dev/null
+++ b/test/comparison-tests/babel-issue81/expectedOutput-3.4/output.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+ bundle.js 4.89 KiB main [emitted] main
+bundle.js.map 3.7 KiB main [emitted] main
+Entrypoint main = bundle.js bundle.js.map
+[./a.ts] 1.18 KiB {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/babel-issue92/expectedOutput-3.4/bundle.js b/test/comparison-tests/babel-issue92/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..e6b3d92e4
--- /dev/null
+++ b/test/comparison-tests/babel-issue92/expectedOutput-3.4/bundle.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _submodule_submodule__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./submodule/submodule */ \"./submodule/submodule.tsx\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_submodule_submodule__WEBPACK_IMPORTED_MODULE_0__[\"default\"]);\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./submodule/submodule.tsx":
+/*!*********************************!*\
+ !*** ./submodule/submodule.tsx ***!
+ \*********************************/
+/*! exports provided: default */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = (\"Hello from submodule\");\n\n//# sourceURL=webpack:///./submodule/submodule.tsx?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/babel-issue92/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/babel-issue92/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..b9f3f10da
--- /dev/null
+++ b/test/comparison-tests/babel-issue92/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,6 @@
+Built at: 2018-4-7 18:31:28
+ Asset Size Chunks Chunk Names
+bundle.js 3.62 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 72 bytes {main} [built]
+[./submodule/submodule.tsx] 38 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/babel-issue92/expectedOutput-3.4/output.txt b/test/comparison-tests/babel-issue92/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..d703f9d74
--- /dev/null
+++ b/test/comparison-tests/babel-issue92/expectedOutput-3.4/output.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.58 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 72 bytes {main} [built]
+[./submodule/submodule.tsx] 38 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/basic/expectedOutput-3.4/bundle.js b/test/comparison-tests/basic/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..1780017e3
--- /dev/null
+++ b/test/comparison-tests/basic/expectedOutput-3.4/bundle.js
@@ -0,0 +1,124 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar submodule = __webpack_require__(/*! ./submodule/submodule */ \"./submodule/submodule.ts\");\nvar externalLib = __webpack_require__(/*! externalLib */ \"./lib/externalLib.js\");\nexternalLib.doSomething(submodule);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./lib/externalLib.js":
+/*!****************************!*\
+ !*** ./lib/externalLib.js ***!
+ \****************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("module.exports = {\n doSomething: function() { } \n}\n\n//# sourceURL=webpack:///./lib/externalLib.js?");
+
+/***/ }),
+
+/***/ "./submodule/submodule.ts":
+/*!********************************!*\
+ !*** ./submodule/submodule.ts ***!
+ \********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar externalLib = __webpack_require__(/*! externalLib */ \"./lib/externalLib.js\");\nexternalLib.doSomething(\"\");\nvar message = \"Hello from submodule\";\nmodule.exports = message;\n\n\n//# sourceURL=webpack:///./submodule/submodule.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/basic/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/basic/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..761579e13
--- /dev/null
+++ b/test/comparison-tests/basic/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,7 @@
+Built at: 2018-4-7 18:31:40
+ Asset Size Chunks Chunk Names
+bundle.js 3.87 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 169 bytes {main} [built]
+[./lib/externalLib.js] 55 bytes {main} [built]
+[./submodule/submodule.ts] 149 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/basic/expectedOutput-3.4/output.txt b/test/comparison-tests/basic/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..f33d2f14a
--- /dev/null
+++ b/test/comparison-tests/basic/expectedOutput-3.4/output.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.83 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 169 bytes {main} [built]
+[./lib/externalLib.js] 55 bytes {main} [built]
+[./submodule/submodule.ts] 149 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/basic/expectedOutput-3.4/patch0/bundle.js b/test/comparison-tests/basic/expectedOutput-3.4/patch0/bundle.js
new file mode 100644
index 000000000..69c4dcc59
--- /dev/null
+++ b/test/comparison-tests/basic/expectedOutput-3.4/patch0/bundle.js
@@ -0,0 +1,124 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar submodule = __webpack_require__(/*! ./submodule/submodule */ \"./submodule/submodule.ts\");\nvar externalLib = __webpack_require__(/*! externalLib */ \"./lib/externalLib.js\");\nexternalLib.doSomething2(submodule);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./lib/externalLib.js":
+/*!****************************!*\
+ !*** ./lib/externalLib.js ***!
+ \****************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("module.exports = {\n doSomething: function() { } \n}\n\n//# sourceURL=webpack:///./lib/externalLib.js?");
+
+/***/ }),
+
+/***/ "./submodule/submodule.ts":
+/*!********************************!*\
+ !*** ./submodule/submodule.ts ***!
+ \********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar externalLib = __webpack_require__(/*! externalLib */ \"./lib/externalLib.js\");\nexternalLib.doSomething(\"\");\nvar message = \"Hello from submodule\";\nmodule.exports = message;\n\n\n//# sourceURL=webpack:///./submodule/submodule.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/basic/expectedOutput-3.4/patch0/output.transpiled.txt b/test/comparison-tests/basic/expectedOutput-3.4/patch0/output.transpiled.txt
new file mode 100644
index 000000000..1073e8b79
--- /dev/null
+++ b/test/comparison-tests/basic/expectedOutput-3.4/patch0/output.transpiled.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.83 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 170 bytes {main} [built]
+[./lib/externalLib.js] 55 bytes {main}
+[./submodule/submodule.ts] 149 bytes {main}
\ No newline at end of file
diff --git a/test/comparison-tests/basic/expectedOutput-3.4/patch0/output.txt b/test/comparison-tests/basic/expectedOutput-3.4/patch0/output.txt
new file mode 100644
index 000000000..9fac8da0d
--- /dev/null
+++ b/test/comparison-tests/basic/expectedOutput-3.4/patch0/output.txt
@@ -0,0 +1,11 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.83 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 170 bytes {main} [built] [1 error]
+[./lib/externalLib.js] 55 bytes {main}
+[./submodule/submodule.ts] 149 bytes {main}
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(3,13)[39m[22m
+[1m[31m TS2551: Property 'doSomething2' does not exist on type 'typeof externalLib'. Did you mean 'doSomething'?[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/basic/expectedOutput-3.4/patch1/bundle.js b/test/comparison-tests/basic/expectedOutput-3.4/patch1/bundle.js
new file mode 100644
index 000000000..1780017e3
--- /dev/null
+++ b/test/comparison-tests/basic/expectedOutput-3.4/patch1/bundle.js
@@ -0,0 +1,124 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar submodule = __webpack_require__(/*! ./submodule/submodule */ \"./submodule/submodule.ts\");\nvar externalLib = __webpack_require__(/*! externalLib */ \"./lib/externalLib.js\");\nexternalLib.doSomething(submodule);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./lib/externalLib.js":
+/*!****************************!*\
+ !*** ./lib/externalLib.js ***!
+ \****************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("module.exports = {\n doSomething: function() { } \n}\n\n//# sourceURL=webpack:///./lib/externalLib.js?");
+
+/***/ }),
+
+/***/ "./submodule/submodule.ts":
+/*!********************************!*\
+ !*** ./submodule/submodule.ts ***!
+ \********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar externalLib = __webpack_require__(/*! externalLib */ \"./lib/externalLib.js\");\nexternalLib.doSomething(\"\");\nvar message = \"Hello from submodule\";\nmodule.exports = message;\n\n\n//# sourceURL=webpack:///./submodule/submodule.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/basic/expectedOutput-3.4/patch1/output.transpiled.txt b/test/comparison-tests/basic/expectedOutput-3.4/patch1/output.transpiled.txt
new file mode 100644
index 000000000..e4a8b9fc4
--- /dev/null
+++ b/test/comparison-tests/basic/expectedOutput-3.4/patch1/output.transpiled.txt
@@ -0,0 +1,7 @@
+Built at: 2018-4-7 18:31:45
+ Asset Size Chunks Chunk Names
+bundle.js 3.87 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 169 bytes {main} [built]
+[./lib/externalLib.js] 55 bytes {main}
+[./submodule/submodule.ts] 149 bytes {main}
\ No newline at end of file
diff --git a/test/comparison-tests/basic/expectedOutput-3.4/patch1/output.txt b/test/comparison-tests/basic/expectedOutput-3.4/patch1/output.txt
new file mode 100644
index 000000000..1afd1cf5f
--- /dev/null
+++ b/test/comparison-tests/basic/expectedOutput-3.4/patch1/output.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.83 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 169 bytes {main} [built]
+[./lib/externalLib.js] 55 bytes {main}
+[./submodule/submodule.ts] 149 bytes {main}
\ No newline at end of file
diff --git a/test/comparison-tests/codeSplitting/expectedOutput-3.4/0.bundle.js b/test/comparison-tests/codeSplitting/expectedOutput-3.4/0.bundle.js
new file mode 100644
index 000000000..12682a0b5
--- /dev/null
+++ b/test/comparison-tests/codeSplitting/expectedOutput-3.4/0.bundle.js
@@ -0,0 +1,27 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],{
+
+/***/ "./c.ts":
+/*!**************!*\
+ !*** ./c.ts ***!
+ \**************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nmodule.exports = 'c';\n\n\n//# sourceURL=webpack:///./c.ts?");
+
+/***/ }),
+
+/***/ "./d.ts":
+/*!**************!*\
+ !*** ./d.ts ***!
+ \**************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nmodule.exports = 'd';\n\n\n//# sourceURL=webpack:///./d.ts?");
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/test/comparison-tests/codeSplitting/expectedOutput-3.4/bundle.js b/test/comparison-tests/codeSplitting/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..3ab91ca5a
--- /dev/null
+++ b/test/comparison-tests/codeSplitting/expectedOutput-3.4/bundle.js
@@ -0,0 +1,238 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ // install a JSONP callback for chunk loading
+/******/ function webpackJsonpCallback(data) {
+/******/ var chunkIds = data[0];
+/******/ var moreModules = data[1];
+/******/
+/******/
+/******/ // add "moreModules" to the modules object,
+/******/ // then flag all "chunkIds" as loaded and fire callback
+/******/ var moduleId, chunkId, i = 0, resolves = [];
+/******/ for(;i < chunkIds.length; i++) {
+/******/ chunkId = chunkIds[i];
+/******/ if(installedChunks[chunkId]) {
+/******/ resolves.push(installedChunks[chunkId][0]);
+/******/ }
+/******/ installedChunks[chunkId] = 0;
+/******/ }
+/******/ for(moduleId in moreModules) {
+/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
+/******/ modules[moduleId] = moreModules[moduleId];
+/******/ }
+/******/ }
+/******/ if(parentJsonpFunction) parentJsonpFunction(data);
+/******/
+/******/ while(resolves.length) {
+/******/ resolves.shift()();
+/******/ }
+/******/
+/******/ };
+/******/
+/******/
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // object to store loaded and loading chunks
+/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ // Promise = chunk loading, 0 = chunk loaded
+/******/ var installedChunks = {
+/******/ "main": 0
+/******/ };
+/******/
+/******/
+/******/
+/******/ // script path function
+/******/ function jsonpScriptSrc(chunkId) {
+/******/ return __webpack_require__.p + "" + chunkId + ".bundle.js"
+/******/ }
+/******/
+/******/ // 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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/ // This file contains only the entry chunk.
+/******/ // The chunk loading function for additional chunks
+/******/ __webpack_require__.e = function requireEnsure(chunkId) {
+/******/ var promises = [];
+/******/
+/******/
+/******/ // JSONP chunk loading for javascript
+/******/
+/******/ var installedChunkData = installedChunks[chunkId];
+/******/ if(installedChunkData !== 0) { // 0 means "already installed".
+/******/
+/******/ // a Promise means "currently loading".
+/******/ if(installedChunkData) {
+/******/ promises.push(installedChunkData[2]);
+/******/ } else {
+/******/ // setup Promise in chunk cache
+/******/ var promise = new Promise(function(resolve, reject) {
+/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject];
+/******/ });
+/******/ promises.push(installedChunkData[2] = promise);
+/******/
+/******/ // start chunk loading
+/******/ var head = document.getElementsByTagName('head')[0];
+/******/ var script = document.createElement('script');
+/******/ var onScriptComplete;
+/******/
+/******/ script.charset = 'utf-8';
+/******/ script.timeout = 120;
+/******/ if (__webpack_require__.nc) {
+/******/ script.setAttribute("nonce", __webpack_require__.nc);
+/******/ }
+/******/ script.src = jsonpScriptSrc(chunkId);
+/******/
+/******/ onScriptComplete = function (event) {
+/******/ // avoid mem leaks in IE.
+/******/ script.onerror = script.onload = null;
+/******/ clearTimeout(timeout);
+/******/ var chunk = installedChunks[chunkId];
+/******/ if(chunk !== 0) {
+/******/ if(chunk) {
+/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type);
+/******/ var realSrc = event && event.target && event.target.src;
+/******/ var error = new Error('Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')');
+/******/ error.type = errorType;
+/******/ error.request = realSrc;
+/******/ chunk[1](error);
+/******/ }
+/******/ installedChunks[chunkId] = undefined;
+/******/ }
+/******/ };
+/******/ var timeout = setTimeout(function(){
+/******/ onScriptComplete({ type: 'timeout', target: script });
+/******/ }, 120000);
+/******/ script.onerror = script.onload = onScriptComplete;
+/******/ head.appendChild(script);
+/******/ }
+/******/ }
+/******/ return Promise.all(promises);
+/******/ };
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/ // on error function for async loading
+/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; };
+/******/
+/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || [];
+/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
+/******/ jsonpArray.push = webpackJsonpCallback;
+/******/ jsonpArray = jsonpArray.slice();
+/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);
+/******/ var parentJsonpFunction = oldJsonpFunction;
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./a.ts":
+/*!**************!*\
+ !*** ./a.ts ***!
+ \**************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nmodule.exports = 'a';\n\n\n//# sourceURL=webpack:///./a.ts?");
+
+/***/ }),
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar a = __webpack_require__(/*! ./a */ \"./a.ts\");\nvar b = __webpack_require__(/*! ./b */ \"./b.ts\");\nconsole.log(a);\nconsole.log(b);\n__webpack_require__.e(/*! require.ensure */ 0).then((function (require) {\n // These require calls are emitted (note these are NOT TypeScript\n // `import ... require` statements). `require.ensure` is defined in\n // require.d.ts. Webpack sees this and automatically puts c and d\n // into a separate chunk. \n var cModule = __webpack_require__(/*! ./c */ \"./c.ts\");\n var dModule = __webpack_require__(/*! ./d */ \"./d.ts\");\n // cModule and dModule will typed as strings\n console.log(cModule);\n console.log(dModule);\n}).bind(null, __webpack_require__)).catch(__webpack_require__.oe);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./b.ts":
+/*!**************!*\
+ !*** ./b.ts ***!
+ \**************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nmodule.exports = 'b';\n\n\n//# sourceURL=webpack:///./b.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/codeSplitting/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/codeSplitting/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..bdd359918
--- /dev/null
+++ b/test/comparison-tests/codeSplitting/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,10 @@
+Built at: 2018-4-7 18:31:52
+ Asset Size Chunks Chunk Names
+ bundle.js 8.12 KiB main [emitted] main
+0.bundle.js 592 bytes 0 [emitted]
+Entrypoint main = bundle.js
+[./a.ts] 36 bytes {main} [built]
+[./app.ts] 589 bytes {main} [built]
+[./b.ts] 36 bytes {main} [built]
+[./c.ts] 36 bytes {0} [built]
+[./d.ts] 36 bytes {0} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/codeSplitting/expectedOutput-3.4/output.txt b/test/comparison-tests/codeSplitting/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..6c34eca79
--- /dev/null
+++ b/test/comparison-tests/codeSplitting/expectedOutput-3.4/output.txt
@@ -0,0 +1,9 @@
+ Asset Size Chunks Chunk Names
+ bundle.js 9.41 KiB main [emitted] main
+0.bundle.js 592 bytes 0 [emitted]
+Entrypoint main = bundle.js
+[./a.ts] 36 bytes {main} [built]
+[./app.ts] 589 bytes {main} [built]
+[./b.ts] 36 bytes {main} [built]
+[./c.ts] 36 bytes {0} [built]
+[./d.ts] 36 bytes {0} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/colors/expectedOutput-3.4/bundle.js b/test/comparison-tests/colors/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..2a238bb51
--- /dev/null
+++ b/test/comparison-tests/colors/expectedOutput-3.4/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("throw new Error(\"Module parse failed: Unexpected token (2:1)/nYou may need an appropriate loader to handle this file type./n| var a;/n> == 0;/n| \");\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/colors/expectedOutput-3.4/output.txt b/test/comparison-tests/colors/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..c4b5904e2
--- /dev/null
+++ b/test/comparison-tests/colors/expectedOutput-3.4/output.txt
@@ -0,0 +1,16 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.89 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 149 bytes {main} [built] [failed] [2 errors]
+
+ERROR in ./app.ts 2:1
+Module parse failed: Unexpected token (2:1)
+You may need an appropriate loader to handle this file type.
+| var a;
+> == 0;
+|
+
+ERROR in app.ts
+./app.ts
+[tsl] ERROR in app.ts(1,7)
+ TS1005: ',' expected.
\ No newline at end of file
diff --git a/test/comparison-tests/conditionalRequire/expectedOutput-3.4/bundle.js b/test/comparison-tests/conditionalRequire/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..c37024a15
--- /dev/null
+++ b/test/comparison-tests/conditionalRequire/expectedOutput-3.4/bundle.js
@@ -0,0 +1,101 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nconsole.log('do something');\n// The DEBUG constant will be inlined by webpack's DefinePlugin (see config)\n// The whole if-statement can then be removed by UglifyJS\nif (false) { var debug; }\nconsole.log('do something else');\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/conditionalRequire/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/conditionalRequire/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..c37bebdd1
--- /dev/null
+++ b/test/comparison-tests/conditionalRequire/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,5 @@
+Built at: 2018-3-18 09:16:15
+ Asset Size Chunks Chunk Names
+bundle.js 3.06 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 312 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/conditionalRequire/expectedOutput-3.4/output.txt b/test/comparison-tests/conditionalRequire/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..99287c682
--- /dev/null
+++ b/test/comparison-tests/conditionalRequire/expectedOutput-3.4/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.02 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 312 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/bundle.js b/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..bd06df038
--- /dev/null
+++ b/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/bundle.js
@@ -0,0 +1,79 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+
+/******/ // identity function for calling harmony imports with the correct context
+/******/ __webpack_require__.i = function(value) { return value; };
+
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, {
+/******/ configurable: false,
+/******/ enumerable: true,
+/******/ get: getter
+/******/ });
+/******/ }
+/******/ };
+
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = 0);
+/******/ })
+/************************************************************************/
+/******/ ([
+/* 0 */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+
+console.log(1 /* Bar */);
+
+
+/***/ })
+/******/ ]);
\ No newline at end of file
diff --git a/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/bundle.transpiled.js b/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/bundle.transpiled.js
new file mode 100644
index 000000000..ced96f0a0
--- /dev/null
+++ b/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/bundle.transpiled.js
@@ -0,0 +1,74 @@
+/******/ (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, __webpack_require__) {
+
+ "use strict";
+ var foo_1 = __webpack_require__(1);
+ console.log(foo_1.BarEnum.Bar);
+
+
+/***/ },
+/* 1 */
+/***/ function(module, exports, __webpack_require__) {
+
+ "use strict";
+ var bar_1 = __webpack_require__(2);
+ exports.BarEnum = bar_1.BarEnum;
+
+
+/***/ },
+/* 2 */
+/***/ function(module, exports) {
+
+ "use strict";
+ var BarEnum;
+ (function (BarEnum) {
+ BarEnum[BarEnum["Bar"] = 1] = "Bar";
+ })(BarEnum = exports.BarEnum || (exports.BarEnum = {}));
+ ;
+
+
+/***/ }
+/******/ ]);
\ No newline at end of file
diff --git a/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..880b69860
--- /dev/null
+++ b/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 1.86 kB 0 [emitted] main
+chunk {0} bundle.js (main) 302 bytes [rendered]
+ [0] ./.test/constEnumReExportWatch/app.ts 76 bytes {0} [built]
+ [1] ./.test/constEnumReExportWatch/foo.ts 77 bytes {0} [built]
+ [2] ./.test/constEnumReExportWatch/bar.ts 149 bytes {0} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/output.txt b/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..f03c54463
--- /dev/null
+++ b/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 2.57 kB 0 [emitted] main
+chunk {0} bundle.js (main) 40 bytes [entry] [rendered]
+ [0] ./.test/constEnumReExportWatch/app.ts 40 bytes {0} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/patch0/bundle.js b/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/patch0/bundle.js
new file mode 100644
index 000000000..f06a7bba3
--- /dev/null
+++ b/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/patch0/bundle.js
@@ -0,0 +1,52 @@
+/******/ (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) {
+
+ "use strict";
+ console.log(2 /* Bar */);
+
+
+/***/ }
+/******/ ]);
\ No newline at end of file
diff --git a/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/patch0/bundle.transpiled.js b/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/patch0/bundle.transpiled.js
new file mode 100644
index 000000000..6a9fddf08
--- /dev/null
+++ b/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/patch0/bundle.transpiled.js
@@ -0,0 +1,74 @@
+/******/ (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, __webpack_require__) {
+
+ "use strict";
+ var foo_1 = __webpack_require__(1);
+ console.log(foo_1.BarEnum.Bar);
+
+
+/***/ },
+/* 1 */
+/***/ function(module, exports, __webpack_require__) {
+
+ "use strict";
+ var bar_1 = __webpack_require__(2);
+ exports.BarEnum = bar_1.BarEnum;
+
+
+/***/ },
+/* 2 */
+/***/ function(module, exports) {
+
+ "use strict";
+ var BarEnum;
+ (function (BarEnum) {
+ BarEnum[BarEnum["Bar"] = 2] = "Bar";
+ })(BarEnum = exports.BarEnum || (exports.BarEnum = {}));
+ ;
+
+
+/***/ }
+/******/ ]);
\ No newline at end of file
diff --git a/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/patch0/output.transpiled.txt b/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/patch0/output.transpiled.txt
new file mode 100644
index 000000000..c1f20fa51
--- /dev/null
+++ b/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/patch0/output.transpiled.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 1.86 kB 0 [emitted] main
+chunk {0} bundle.js (main) 302 bytes [rendered]
+ [0] ./.test/constEnumReExportWatch/app.ts 76 bytes {0}
+ [1] ./.test/constEnumReExportWatch/foo.ts 77 bytes {0}
+ [2] ./.test/constEnumReExportWatch/bar.ts 149 bytes {0} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/patch0/output.txt b/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/patch0/output.txt
new file mode 100644
index 000000000..c3c074468
--- /dev/null
+++ b/test/comparison-tests/constEnumReExportWatch/expectedOutput-3.4/patch0/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 1.43 kB 0 [emitted] main
+chunk {0} bundle.js (main) 40 bytes [rendered]
+ [0] ./.test/constEnumReExportWatch/app.ts 40 bytes {0} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformer/expectedOutput-3.4/bundle.js b/test/comparison-tests/customTransformer/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..98f9ec82e
--- /dev/null
+++ b/test/comparison-tests/customTransformer/expectedOutput-3.4/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("var message = \"HELLO FROM ME!\";\nconsole.log(message);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformer/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/customTransformer/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..9cbd94dd1
--- /dev/null
+++ b/test/comparison-tests/customTransformer/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,5 @@
+Built at: 2018-4-7 18:32:15
+ Asset Size Chunks Chunk Names
+bundle.js 2.83 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 54 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformer/expectedOutput-3.4/output.txt b/test/comparison-tests/customTransformer/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..9977baa4b
--- /dev/null
+++ b/test/comparison-tests/customTransformer/expectedOutput-3.4/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.79 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 54 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformer/expectedOutput-3.4/patch0/bundle.js b/test/comparison-tests/customTransformer/expectedOutput-3.4/patch0/bundle.js
new file mode 100644
index 000000000..a659b2234
--- /dev/null
+++ b/test/comparison-tests/customTransformer/expectedOutput-3.4/patch0/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("var message = \"HELLO FROM HIM!\";\nconsole.log(message);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformer/expectedOutput-3.4/patch0/output.transpiled.txt b/test/comparison-tests/customTransformer/expectedOutput-3.4/patch0/output.transpiled.txt
new file mode 100644
index 000000000..6143f985e
--- /dev/null
+++ b/test/comparison-tests/customTransformer/expectedOutput-3.4/patch0/output.transpiled.txt
@@ -0,0 +1,5 @@
+Built at: 2018-4-7 18:32:18
+ Asset Size Chunks Chunk Names
+bundle.js 2.83 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 55 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformer/expectedOutput-3.4/patch0/output.txt b/test/comparison-tests/customTransformer/expectedOutput-3.4/patch0/output.txt
new file mode 100644
index 000000000..2ab5de1d6
--- /dev/null
+++ b/test/comparison-tests/customTransformer/expectedOutput-3.4/patch0/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.79 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 55 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformer/expectedOutput-3.4/patch1/bundle.js b/test/comparison-tests/customTransformer/expectedOutput-3.4/patch1/bundle.js
new file mode 100644
index 000000000..5cb90e8ac
--- /dev/null
+++ b/test/comparison-tests/customTransformer/expectedOutput-3.4/patch1/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("var message = \"HELLO FROM US!\";\nconsole.log(message);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformer/expectedOutput-3.4/patch1/output.transpiled.txt b/test/comparison-tests/customTransformer/expectedOutput-3.4/patch1/output.transpiled.txt
new file mode 100644
index 000000000..c8a3f6ad8
--- /dev/null
+++ b/test/comparison-tests/customTransformer/expectedOutput-3.4/patch1/output.transpiled.txt
@@ -0,0 +1,5 @@
+Built at: 2018-4-7 18:32:20
+ Asset Size Chunks Chunk Names
+bundle.js 2.83 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 54 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformer/expectedOutput-3.4/patch1/output.txt b/test/comparison-tests/customTransformer/expectedOutput-3.4/patch1/output.txt
new file mode 100644
index 000000000..9977baa4b
--- /dev/null
+++ b/test/comparison-tests/customTransformer/expectedOutput-3.4/patch1/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.79 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 54 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/bundle.js b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..98f9ec82e
--- /dev/null
+++ b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("var message = \"HELLO FROM ME!\";\nconsole.log(message);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..f5b9cedcb
--- /dev/null
+++ b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,5 @@
+Built at: 2018-4-7 18:32:33
+ Asset Size Chunks Chunk Names
+bundle.js 2.83 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 54 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/output.txt b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..9977baa4b
--- /dev/null
+++ b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.79 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 54 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch0/bundle.js b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch0/bundle.js
new file mode 100644
index 000000000..a659b2234
--- /dev/null
+++ b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch0/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("var message = \"HELLO FROM HIM!\";\nconsole.log(message);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch0/output.transpiled.txt b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch0/output.transpiled.txt
new file mode 100644
index 000000000..7fd4ddc80
--- /dev/null
+++ b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch0/output.transpiled.txt
@@ -0,0 +1,5 @@
+Built at: 2018-4-7 18:32:35
+ Asset Size Chunks Chunk Names
+bundle.js 2.83 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 55 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch0/output.txt b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch0/output.txt
new file mode 100644
index 000000000..2ab5de1d6
--- /dev/null
+++ b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch0/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.79 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 55 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch1/bundle.js b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch1/bundle.js
new file mode 100644
index 000000000..5cb90e8ac
--- /dev/null
+++ b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch1/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("var message = \"HELLO FROM US!\";\nconsole.log(message);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch1/output.transpiled.txt b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch1/output.transpiled.txt
new file mode 100644
index 000000000..a9980d51e
--- /dev/null
+++ b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch1/output.transpiled.txt
@@ -0,0 +1,5 @@
+Built at: 2018-4-7 18:32:38
+ Asset Size Chunks Chunk Names
+bundle.js 2.83 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 54 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch1/output.txt b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch1/output.txt
new file mode 100644
index 000000000..9977baa4b
--- /dev/null
+++ b/test/comparison-tests/customTransformerUsingPathString/expectedOutput-3.4/patch1/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.79 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 54 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/declarationDeps/expectedOutput-3.4/bundle.js b/test/comparison-tests/declarationDeps/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..2be063c80
--- /dev/null
+++ b/test/comparison-tests/declarationDeps/expectedOutput-3.4/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("Hello.sayHello('Hi');\nHello.sayHi('Hi');\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/declarationDeps/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/declarationDeps/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..568a977d3
--- /dev/null
+++ b/test/comparison-tests/declarationDeps/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.78 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 41 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/declarationDeps/expectedOutput-3.4/output.txt b/test/comparison-tests/declarationDeps/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..31af3d0b6
--- /dev/null
+++ b/test/comparison-tests/declarationDeps/expectedOutput-3.4/output.txt
@@ -0,0 +1,9 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.78 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 41 bytes {main} [built] [1 error]
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(2,7)[39m[22m
+[1m[31m TS2339: Property 'sayHi' does not exist on type 'typeof Hello'.[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/declarationOutput/expectedOutput-3.4/app.d.ts b/test/comparison-tests/declarationOutput/expectedOutput-3.4/app.d.ts
new file mode 100644
index 000000000..42c1b770a
--- /dev/null
+++ b/test/comparison-tests/declarationOutput/expectedOutput-3.4/app.d.ts
@@ -0,0 +1,5 @@
+import dep = require('./sub/dep');
+declare class Test extends dep {
+ doSomething(): void;
+}
+export = Test;
diff --git a/test/comparison-tests/declarationOutput/expectedOutput-3.4/bundle.js b/test/comparison-tests/declarationOutput/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..577623a74
--- /dev/null
+++ b/test/comparison-tests/declarationOutput/expectedOutput-3.4/bundle.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar dep = __webpack_require__(/*! ./sub/dep */ \"./sub/dep.ts\");\nvar Test = /** @class */ (function (_super) {\n __extends(Test, _super);\n function Test() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Test.prototype.doSomething = function () {\n };\n return Test;\n}(dep));\nmodule.exports = Test;\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./sub/dep.ts":
+/*!********************!*\
+ !*** ./sub/dep.ts ***!
+ \********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar Test = /** @class */ (function () {\n function Test() {\n }\n Test.prototype.doSomething = function () {\n };\n return Test;\n}());\nmodule.exports = Test;\n\n\n//# sourceURL=webpack:///./sub/dep.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/declarationOutput/expectedOutput-3.4/output.txt b/test/comparison-tests/declarationOutput/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..411feb2ac
--- /dev/null
+++ b/test/comparison-tests/declarationOutput/expectedOutput-3.4/output.txt
@@ -0,0 +1,7 @@
+ Asset Size Chunks Chunk Names
+ bundle.js 5.14 KiB main [emitted] main
+ app.d.ts 110 bytes [emitted]
+sub/dep.d.ts 63 bytes [emitted]
+Entrypoint main = bundle.js
+[./app.ts] 911 bytes {main} [built]
+[./sub/dep.ts] 182 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/declarationOutput/expectedOutput-3.4/sub/dep.d.ts b/test/comparison-tests/declarationOutput/expectedOutput-3.4/sub/dep.d.ts
new file mode 100644
index 000000000..0d9a53ad0
--- /dev/null
+++ b/test/comparison-tests/declarationOutput/expectedOutput-3.4/sub/dep.d.ts
@@ -0,0 +1,4 @@
+declare class Test {
+ doSomething(): void;
+}
+export = Test;
diff --git a/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/app.d.ts b/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/app.d.ts
new file mode 100644
index 000000000..dffb18358
--- /dev/null
+++ b/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/app.d.ts
@@ -0,0 +1,6 @@
+import dep = require('./sub/dep');
+declare class Test extends dep {
+ doSomething(): void;
+}
+export = Test;
+//# sourceMappingURL=app.d.ts.map
\ No newline at end of file
diff --git a/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/app.d.ts.map b/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/app.d.ts.map
new file mode 100644
index 000000000..48bc3c227
--- /dev/null
+++ b/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/app.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../app.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,GAAG,QAAQ,WAAW,CAAC,CAAC;AAElC,cAAM,IAAK,SAAQ,GAAG;IACrB,WAAW;CAGX;AAED,SAAS,IAAI,CAAC"}
\ No newline at end of file
diff --git a/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/bundle.js b/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..577623a74
--- /dev/null
+++ b/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/bundle.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar dep = __webpack_require__(/*! ./sub/dep */ \"./sub/dep.ts\");\nvar Test = /** @class */ (function (_super) {\n __extends(Test, _super);\n function Test() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n Test.prototype.doSomething = function () {\n };\n return Test;\n}(dep));\nmodule.exports = Test;\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./sub/dep.ts":
+/*!********************!*\
+ !*** ./sub/dep.ts ***!
+ \********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar Test = /** @class */ (function () {\n function Test() {\n }\n Test.prototype.doSomething = function () {\n };\n return Test;\n}());\nmodule.exports = Test;\n\n\n//# sourceURL=webpack:///./sub/dep.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/output.txt b/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..2e52c2fdf
--- /dev/null
+++ b/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/output.txt
@@ -0,0 +1,9 @@
+ Asset Size Chunks Chunk Names
+ bundle.js 5.14 KiB main [emitted] main
+ app.d.ts.map 197 bytes [emitted]
+ app.d.ts 143 bytes [emitted]
+sub/dep.d.ts.map 152 bytes [emitted]
+ sub/dep.d.ts 96 bytes [emitted]
+Entrypoint main = bundle.js
+[./app.ts] 911 bytes {main} [built]
+[./sub/dep.ts] 182 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/sub/dep.d.ts b/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/sub/dep.d.ts
new file mode 100644
index 000000000..5708986f8
--- /dev/null
+++ b/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/sub/dep.d.ts
@@ -0,0 +1,5 @@
+declare class Test {
+ doSomething(): void;
+}
+export = Test;
+//# sourceMappingURL=dep.d.ts.map
\ No newline at end of file
diff --git a/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/sub/dep.d.ts.map b/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/sub/dep.d.ts.map
new file mode 100644
index 000000000..9da4dc7f3
--- /dev/null
+++ b/test/comparison-tests/declarationOutputWithMaps/expectedOutput-3.4/sub/dep.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"dep.d.ts","sourceRoot":"","sources":["../../sub/dep.ts"],"names":[],"mappings":"AACA,cAAM,IAAI;IACT,WAAW;CAGX;AAED,SAAS,IAAI,CAAC"}
\ No newline at end of file
diff --git a/test/comparison-tests/declarationWatch/expectedOutput-3.4/bundle.js b/test/comparison-tests/declarationWatch/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..79d3f4450
--- /dev/null
+++ b/test/comparison-tests/declarationWatch/expectedOutput-3.4/bundle.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar dep = __webpack_require__(/*! ./dep */ \"./dep.ts\");\nconsole.log(dep);\nThing.doSomething();\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./dep.ts":
+/*!****************!*\
+ !*** ./dep.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nThing.doSomething();\nmodule.exports = 'dep';\n\n\n//# sourceURL=webpack:///./dep.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/declarationWatch/expectedOutput-3.4/output.txt b/test/comparison-tests/declarationWatch/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..c9b617373
--- /dev/null
+++ b/test/comparison-tests/declarationWatch/expectedOutput-3.4/output.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.18 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 108 bytes {main} [built]
+[./dep.ts] 59 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/declarationWatch/expectedOutput-3.4/patch0/bundle.js b/test/comparison-tests/declarationWatch/expectedOutput-3.4/patch0/bundle.js
new file mode 100644
index 000000000..79d3f4450
--- /dev/null
+++ b/test/comparison-tests/declarationWatch/expectedOutput-3.4/patch0/bundle.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar dep = __webpack_require__(/*! ./dep */ \"./dep.ts\");\nconsole.log(dep);\nThing.doSomething();\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./dep.ts":
+/*!****************!*\
+ !*** ./dep.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nThing.doSomething();\nmodule.exports = 'dep';\n\n\n//# sourceURL=webpack:///./dep.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/declarationWatch/expectedOutput-3.4/patch0/output.txt b/test/comparison-tests/declarationWatch/expectedOutput-3.4/patch0/output.txt
new file mode 100644
index 000000000..f818ddc7c
--- /dev/null
+++ b/test/comparison-tests/declarationWatch/expectedOutput-3.4/patch0/output.txt
@@ -0,0 +1,15 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.18 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 108 bytes {main} [built] [1 error]
+[./dep.ts] 59 bytes {main} [built] [1 error]
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(5,7)[39m[22m
+[1m[31m TS2339: Property 'doSomething' does not exist on type 'typeof Thing'.[39m[22m
+
+ERROR in dep.ts
+./dep.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mdep.ts(1,7)[39m[22m
+[1m[31m TS2339: Property 'doSomething' does not exist on type 'typeof Thing'.[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/declarationWatch/expectedOutput-3.4/patch1/bundle.js b/test/comparison-tests/declarationWatch/expectedOutput-3.4/patch1/bundle.js
new file mode 100644
index 000000000..79d3f4450
--- /dev/null
+++ b/test/comparison-tests/declarationWatch/expectedOutput-3.4/patch1/bundle.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar dep = __webpack_require__(/*! ./dep */ \"./dep.ts\");\nconsole.log(dep);\nThing.doSomething();\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./dep.ts":
+/*!****************!*\
+ !*** ./dep.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nThing.doSomething();\nmodule.exports = 'dep';\n\n\n//# sourceURL=webpack:///./dep.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/declarationWatch/expectedOutput-3.4/patch1/output.txt b/test/comparison-tests/declarationWatch/expectedOutput-3.4/patch1/output.txt
new file mode 100644
index 000000000..c9b617373
--- /dev/null
+++ b/test/comparison-tests/declarationWatch/expectedOutput-3.4/patch1/output.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.18 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 108 bytes {main} [built]
+[./dep.ts] 59 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/dependencyErrors/expectedOutput-3.4/bundle.js b/test/comparison-tests/dependencyErrors/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..36ba9c651
--- /dev/null
+++ b/test/comparison-tests/dependencyErrors/expectedOutput-3.4/bundle.js
@@ -0,0 +1,125 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar dep1 = __webpack_require__(/*! ./dep1 */ \"./dep1.ts\");\nvar dep2 = __webpack_require__(/*! ./dep2 */ \"./dep2.ts\");\ndep1('');\ndep2('');\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./dep1.ts":
+/*!*****************!*\
+ !*** ./dep1.ts ***!
+ \*****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nfunction doSomething(input) {\n}\nmodule.exports = doSomething;\n\n\n//# sourceURL=webpack:///./dep1.ts?");
+
+/***/ }),
+
+/***/ "./dep2.ts":
+/*!*****************!*\
+ !*** ./dep2.ts ***!
+ \*****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nfunction doSomething(input) {\n}\nmodule.exports = doSomething;\n\n\n//# sourceURL=webpack:///./dep2.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/dependencyErrors/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/dependencyErrors/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..0b346f752
--- /dev/null
+++ b/test/comparison-tests/dependencyErrors/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.56 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 121 bytes {main} [built]
+[./dep1.ts] 76 bytes {main} [built]
+[./dep2.ts] 76 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/dependencyErrors/expectedOutput-3.4/output.txt b/test/comparison-tests/dependencyErrors/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..fd158815b
--- /dev/null
+++ b/test/comparison-tests/dependencyErrors/expectedOutput-3.4/output.txt
@@ -0,0 +1,16 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.56 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 121 bytes {main} [built] [2 errors]
+[./dep1.ts] 76 bytes {main} [built]
+[./dep2.ts] 76 bytes {main} [built]
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(4,6)[39m[22m
+[1m[31m TS2345: Argument of type '""' is not assignable to parameter of type 'number'.[39m[22m
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(5,6)[39m[22m
+[1m[31m TS2345: Argument of type '""' is not assignable to parameter of type 'number'.[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/dependencyErrors/expectedOutput-3.4/patch0/bundle.js b/test/comparison-tests/dependencyErrors/expectedOutput-3.4/patch0/bundle.js
new file mode 100644
index 000000000..36ba9c651
--- /dev/null
+++ b/test/comparison-tests/dependencyErrors/expectedOutput-3.4/patch0/bundle.js
@@ -0,0 +1,125 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar dep1 = __webpack_require__(/*! ./dep1 */ \"./dep1.ts\");\nvar dep2 = __webpack_require__(/*! ./dep2 */ \"./dep2.ts\");\ndep1('');\ndep2('');\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./dep1.ts":
+/*!*****************!*\
+ !*** ./dep1.ts ***!
+ \*****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nfunction doSomething(input) {\n}\nmodule.exports = doSomething;\n\n\n//# sourceURL=webpack:///./dep1.ts?");
+
+/***/ }),
+
+/***/ "./dep2.ts":
+/*!*****************!*\
+ !*** ./dep2.ts ***!
+ \*****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nfunction doSomething(input) {\n}\nmodule.exports = doSomething;\n\n\n//# sourceURL=webpack:///./dep2.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/dependencyErrors/expectedOutput-3.4/patch0/output.transpiled.txt b/test/comparison-tests/dependencyErrors/expectedOutput-3.4/patch0/output.transpiled.txt
new file mode 100644
index 000000000..3be50af87
--- /dev/null
+++ b/test/comparison-tests/dependencyErrors/expectedOutput-3.4/patch0/output.transpiled.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.56 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 121 bytes {main}
+[./dep1.ts] 76 bytes {main} [built]
+[./dep2.ts] 76 bytes {main}
\ No newline at end of file
diff --git a/test/comparison-tests/dependencyErrors/expectedOutput-3.4/patch0/output.txt b/test/comparison-tests/dependencyErrors/expectedOutput-3.4/patch0/output.txt
new file mode 100644
index 000000000..f219c5537
--- /dev/null
+++ b/test/comparison-tests/dependencyErrors/expectedOutput-3.4/patch0/output.txt
@@ -0,0 +1,11 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.56 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 121 bytes {main} [built] [1 error]
+[./dep1.ts] 76 bytes {main} [built]
+[./dep2.ts] 76 bytes {main}
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(5,6)[39m[22m
+[1m[31m TS2345: Argument of type '""' is not assignable to parameter of type 'number'.[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/errorFormatter/expectedOutput-3.4/bundle.js b/test/comparison-tests/errorFormatter/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..02dd408f1
--- /dev/null
+++ b/test/comparison-tests/errorFormatter/expectedOutput-3.4/bundle.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar myComponent = __webpack_require__(/*! components/myComponent */ \"./common/components/myComponent.ts\");\nconsole.log(myComponent);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./common/components/myComponent.ts":
+/*!******************************************!*\
+ !*** ./common/components/myComponent.ts ***!
+ \******************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nmodule.exports = 'myComponent';\n\n\n//# sourceURL=webpack:///./common/components/myComponent.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/errorFormatter/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/errorFormatter/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..7daafbd66
--- /dev/null
+++ b/test/comparison-tests/errorFormatter/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.33 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 120 bytes {main} [built]
+[./common/components/myComponent.ts] 46 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/errorFormatter/expectedOutput-3.4/output.txt b/test/comparison-tests/errorFormatter/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..f23e1578c
--- /dev/null
+++ b/test/comparison-tests/errorFormatter/expectedOutput-3.4/output.txt
@@ -0,0 +1,9 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.33 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 120 bytes {main} [built] [1 error]
+[./common/components/myComponent.ts] 46 bytes {main} [built]
+
+ERROR in app.ts
+./app.ts
+Does not compute.... [1m[31mcode: 2307,severity: error,content: Cannot find module 'components/myComponent2'.,file: app.ts,line: 2,character: 31,context: .test\errorFormatter[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/errors/expectedOutput-3.4/bundle.js b/test/comparison-tests/errors/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..2a238bb51
--- /dev/null
+++ b/test/comparison-tests/errors/expectedOutput-3.4/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("throw new Error(\"Module parse failed: Unexpected token (2:1)/nYou may need an appropriate loader to handle this file type./n| var a;/n> == 0;/n| \");\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/errors/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/errors/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..e13f20c11
--- /dev/null
+++ b/test/comparison-tests/errors/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,16 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.89 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 149 bytes {main} [built] [failed] [2 errors]
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(1,7)[39m[22m
+[1m[31m TS1005: ',' expected.[39m[22m
+
+ERROR in ./app.ts 2:1
+Module parse failed: Unexpected token (2:1)
+You may need an appropriate loader to handle this file type.
+| var a;
+> == 0;
+|
\ No newline at end of file
diff --git a/test/comparison-tests/errors/expectedOutput-3.4/output.txt b/test/comparison-tests/errors/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..66a640828
--- /dev/null
+++ b/test/comparison-tests/errors/expectedOutput-3.4/output.txt
@@ -0,0 +1,16 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.89 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 149 bytes {main} [built] [failed] [2 errors]
+
+ERROR in ./app.ts 2:1
+Module parse failed: Unexpected token (2:1)
+You may need an appropriate loader to handle this file type.
+| var a;
+> == 0;
+|
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(1,7)[39m[22m
+[1m[31m TS1005: ',' expected.[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/es3/expectedOutput-3.4/bundle.js b/test/comparison-tests/es3/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..1ccaf64d6
--- /dev/null
+++ b/test/comparison-tests/es3/expectedOutput-3.4/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("({ get x() { return 1; } });\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/es3/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/es3/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..d51d7f174
--- /dev/null
+++ b/test/comparison-tests/es3/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.76 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 29 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/es3/expectedOutput-3.4/output.txt b/test/comparison-tests/es3/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..12a3418dd
--- /dev/null
+++ b/test/comparison-tests/es3/expectedOutput-3.4/output.txt
@@ -0,0 +1,9 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.76 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 29 bytes {main} [built] [1 error]
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(1,7)[39m[22m
+[1m[31m TS1056: Accessors are only available when targeting ECMAScript 5 and higher.[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/es5/expectedOutput-3.4/bundle.js b/test/comparison-tests/es5/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..9e16aea65
--- /dev/null
+++ b/test/comparison-tests/es5/expectedOutput-3.4/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("({ get x() { return 1; } });\nvar mapsDontExistYet = new Map();\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/es5/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/es5/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..67449578b
--- /dev/null
+++ b/test/comparison-tests/es5/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.8 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 63 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/es5/expectedOutput-3.4/output.txt b/test/comparison-tests/es5/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..67449578b
--- /dev/null
+++ b/test/comparison-tests/es5/expectedOutput-3.4/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.8 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 63 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/es6/expectedOutput-3.4/bundle.js b/test/comparison-tests/es6/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..6b32b06c7
--- /dev/null
+++ b/test/comparison-tests/es6/expectedOutput-3.4/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("({ get x() { return 1; } });\nSymbol;\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/es6/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/es6/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..35be49d90
--- /dev/null
+++ b/test/comparison-tests/es6/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,5 @@
+Built at: 2018-4-7 18:33:38
+ Asset Size Chunks Chunk Names
+bundle.js 2.81 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 37 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/es6/expectedOutput-3.4/output.txt b/test/comparison-tests/es6/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..e60b401c7
--- /dev/null
+++ b/test/comparison-tests/es6/expectedOutput-3.4/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.77 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 37 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/es6codeSplitting/expectedOutput-3.4/0.bundle.js b/test/comparison-tests/es6codeSplitting/expectedOutput-3.4/0.bundle.js
new file mode 100644
index 000000000..9a5b38037
--- /dev/null
+++ b/test/comparison-tests/es6codeSplitting/expectedOutput-3.4/0.bundle.js
@@ -0,0 +1,27 @@
+(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[0],{
+
+/***/ "./c.ts":
+/*!**************!*\
+ !*** ./c.ts ***!
+ \**************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = 'c';\n\n\n//# sourceURL=webpack:///./c.ts?");
+
+/***/ }),
+
+/***/ "./d.ts":
+/*!**************!*\
+ !*** ./d.ts ***!
+ \**************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = 'd';\n\n\n//# sourceURL=webpack:///./d.ts?");
+
+/***/ })
+
+}]);
\ No newline at end of file
diff --git a/test/comparison-tests/es6codeSplitting/expectedOutput-3.4/bundle.js b/test/comparison-tests/es6codeSplitting/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..a5bc8f4c0
--- /dev/null
+++ b/test/comparison-tests/es6codeSplitting/expectedOutput-3.4/bundle.js
@@ -0,0 +1,238 @@
+/******/ (function(modules) { // webpackBootstrap
+/******/ // install a JSONP callback for chunk loading
+/******/ function webpackJsonpCallback(data) {
+/******/ var chunkIds = data[0];
+/******/ var moreModules = data[1];
+/******/
+/******/
+/******/ // add "moreModules" to the modules object,
+/******/ // then flag all "chunkIds" as loaded and fire callback
+/******/ var moduleId, chunkId, i = 0, resolves = [];
+/******/ for(;i < chunkIds.length; i++) {
+/******/ chunkId = chunkIds[i];
+/******/ if(installedChunks[chunkId]) {
+/******/ resolves.push(installedChunks[chunkId][0]);
+/******/ }
+/******/ installedChunks[chunkId] = 0;
+/******/ }
+/******/ for(moduleId in moreModules) {
+/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
+/******/ modules[moduleId] = moreModules[moduleId];
+/******/ }
+/******/ }
+/******/ if(parentJsonpFunction) parentJsonpFunction(data);
+/******/
+/******/ while(resolves.length) {
+/******/ resolves.shift()();
+/******/ }
+/******/
+/******/ };
+/******/
+/******/
+/******/ // The module cache
+/******/ var installedModules = {};
+/******/
+/******/ // object to store loaded and loading chunks
+/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched
+/******/ // Promise = chunk loading, 0 = chunk loaded
+/******/ var installedChunks = {
+/******/ "main": 0
+/******/ };
+/******/
+/******/
+/******/
+/******/ // script path function
+/******/ function jsonpScriptSrc(chunkId) {
+/******/ return __webpack_require__.p + "" + chunkId + ".bundle.js"
+/******/ }
+/******/
+/******/ // 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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = true;
+/******/
+/******/ // Return the exports of the module
+/******/ return module.exports;
+/******/ }
+/******/
+/******/ // This file contains only the entry chunk.
+/******/ // The chunk loading function for additional chunks
+/******/ __webpack_require__.e = function requireEnsure(chunkId) {
+/******/ var promises = [];
+/******/
+/******/
+/******/ // JSONP chunk loading for javascript
+/******/
+/******/ var installedChunkData = installedChunks[chunkId];
+/******/ if(installedChunkData !== 0) { // 0 means "already installed".
+/******/
+/******/ // a Promise means "currently loading".
+/******/ if(installedChunkData) {
+/******/ promises.push(installedChunkData[2]);
+/******/ } else {
+/******/ // setup Promise in chunk cache
+/******/ var promise = new Promise(function(resolve, reject) {
+/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject];
+/******/ });
+/******/ promises.push(installedChunkData[2] = promise);
+/******/
+/******/ // start chunk loading
+/******/ var head = document.getElementsByTagName('head')[0];
+/******/ var script = document.createElement('script');
+/******/ var onScriptComplete;
+/******/
+/******/ script.charset = 'utf-8';
+/******/ script.timeout = 120;
+/******/ if (__webpack_require__.nc) {
+/******/ script.setAttribute("nonce", __webpack_require__.nc);
+/******/ }
+/******/ script.src = jsonpScriptSrc(chunkId);
+/******/
+/******/ onScriptComplete = function (event) {
+/******/ // avoid mem leaks in IE.
+/******/ script.onerror = script.onload = null;
+/******/ clearTimeout(timeout);
+/******/ var chunk = installedChunks[chunkId];
+/******/ if(chunk !== 0) {
+/******/ if(chunk) {
+/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type);
+/******/ var realSrc = event && event.target && event.target.src;
+/******/ var error = new Error('Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')');
+/******/ error.type = errorType;
+/******/ error.request = realSrc;
+/******/ chunk[1](error);
+/******/ }
+/******/ installedChunks[chunkId] = undefined;
+/******/ }
+/******/ };
+/******/ var timeout = setTimeout(function(){
+/******/ onScriptComplete({ type: 'timeout', target: script });
+/******/ }, 120000);
+/******/ script.onerror = script.onload = onScriptComplete;
+/******/ head.appendChild(script);
+/******/ }
+/******/ }
+/******/ return Promise.all(promises);
+/******/ };
+/******/
+/******/ // expose the modules object (__webpack_modules__)
+/******/ __webpack_require__.m = modules;
+/******/
+/******/ // expose the module cache
+/******/ __webpack_require__.c = installedModules;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/ // on error function for async loading
+/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; };
+/******/
+/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || [];
+/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray);
+/******/ jsonpArray.push = webpackJsonpCallback;
+/******/ jsonpArray = jsonpArray.slice();
+/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);
+/******/ var parentJsonpFunction = oldJsonpFunction;
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./a.ts":
+/*!**************!*\
+ !*** ./a.ts ***!
+ \**************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = 'a';\n\n\n//# sourceURL=webpack:///./a.ts?");
+
+/***/ }),
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar a_1 = __webpack_require__(/*! ./a */ \"./a.ts\");\nvar b_1 = __webpack_require__(/*! ./b */ \"./b.ts\");\nconsole.log(a_1.default);\nconsole.log(b_1.default);\n__webpack_require__.e(/*! require.ensure */ 0).then((function (require) {\n // These require calls are emitted (note these are NOT TypeScript\n // `import ... from` statements). `require.ensure` is defined in\n // require.d.ts. Webpack sees this and automatically puts c and d\n // into a separate chunk. \n // Note that requiring an ES6 module always returns an object\n // with the named exports. This means if you want to access\n // the default export you have to do so manually.\n // Since we used syntactic sugar for the default export for c, we\n // go ahead and access the default property.\n var cDefault = __webpack_require__(/*! ./c */ \"./c.ts\")[\"default\"];\n // For d, we imported the whole module so we don't access the default\n // property yet. \n var dModule = __webpack_require__(/*! ./d */ \"./d.ts\");\n console.log(cDefault);\n console.log(dModule[\"default\"]);\n}).bind(null, __webpack_require__)).catch(__webpack_require__.oe);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./b.ts":
+/*!**************!*\
+ !*** ./b.ts ***!
+ \**************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = 'b';\n\n\n//# sourceURL=webpack:///./b.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/es6codeSplitting/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/es6codeSplitting/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..d64a57e61
--- /dev/null
+++ b/test/comparison-tests/es6codeSplitting/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,10 @@
+Built at: 2018-2-11 17:53:07
+ Asset Size Chunks Chunk Names
+ bundle.js 8.69 KiB main [emitted] main
+0.bundle.js 726 bytes 0 [emitted]
+Entrypoint main = bundle.js
+[./a.ts] 100 bytes {main} [built]
+[./app.ts] 1020 bytes {main} [built]
+[./b.ts] 100 bytes {main} [built]
+[./c.ts] 100 bytes {0} [built]
+[./d.ts] 100 bytes {0} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/es6codeSplitting/expectedOutput-3.4/output.txt b/test/comparison-tests/es6codeSplitting/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..58eb63d1e
--- /dev/null
+++ b/test/comparison-tests/es6codeSplitting/expectedOutput-3.4/output.txt
@@ -0,0 +1,9 @@
+ Asset Size Chunks Chunk Names
+ bundle.js 9.97 KiB main [emitted] main
+0.bundle.js 726 bytes 0 [emitted]
+Entrypoint main = bundle.js
+[./a.ts] 100 bytes {main} [built]
+[./app.ts] 1020 bytes {main} [built]
+[./b.ts] 100 bytes {main} [built]
+[./c.ts] 100 bytes {0} [built]
+[./d.ts] 100 bytes {0} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/es6withCJS/expectedOutput-3.4/bundle.js b/test/comparison-tests/es6withCJS/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..2ecaec7ac
--- /dev/null
+++ b/test/comparison-tests/es6withCJS/expectedOutput-3.4/bundle.js
@@ -0,0 +1,101 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = 'a';\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/es6withCJS/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/es6withCJS/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..42ba6817b
--- /dev/null
+++ b/test/comparison-tests/es6withCJS/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,5 @@
+Built at: 2018-4-7 18:33:49
+ Asset Size Chunks Chunk Names
+bundle.js 2.9 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 100 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/es6withCJS/expectedOutput-3.4/output.txt b/test/comparison-tests/es6withCJS/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..d5765659c
--- /dev/null
+++ b/test/comparison-tests/es6withCJS/expectedOutput-3.4/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.86 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 100 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/externals/expectedOutput-3.4/bundle.js b/test/comparison-tests/externals/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..008e763d4
--- /dev/null
+++ b/test/comparison-tests/externals/expectedOutput-3.4/bundle.js
@@ -0,0 +1,112 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar hello = __webpack_require__(/*! hello */ \"hello\");\nvar msg = hello.sayHello('World');\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "hello":
+/*!************************!*\
+ !*** external "hello" ***!
+ \************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("module.exports = hello;\n\n//# sourceURL=webpack:///external_%22hello%22?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/externals/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/externals/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..7dc41e252
--- /dev/null
+++ b/test/comparison-tests/externals/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,6 @@
+Built at: 2018-3-18 09:18:08
+ Asset Size Chunks Chunk Names
+bundle.js 3.19 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 106 bytes {main} [built]
+[hello] external "hello" 42 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/externals/expectedOutput-3.4/output.txt b/test/comparison-tests/externals/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..31d7acc68
--- /dev/null
+++ b/test/comparison-tests/externals/expectedOutput-3.4/output.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.15 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 106 bytes {main} [built]
+[hello] external "hello" 42 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/html-webpack-plugin/expectedOutput-3.4/bundle.js b/test/comparison-tests/html-webpack-plugin/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..c9f87f770
--- /dev/null
+++ b/test/comparison-tests/html-webpack-plugin/expectedOutput-3.4/bundle.js
@@ -0,0 +1,85 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, {
+/******/ configurable: false,
+/******/ enumerable: true,
+/******/ get: getter
+/******/ });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("console.log(\"hello\");\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/html-webpack-plugin/expectedOutput-3.4/index.html b/test/comparison-tests/html-webpack-plugin/expectedOutput-3.4/index.html
new file mode 100644
index 000000000..866dfa443
--- /dev/null
+++ b/test/comparison-tests/html-webpack-plugin/expectedOutput-3.4/index.html
@@ -0,0 +1,9 @@
+
+
+
+
+ Webpack App
+
+
+
+
\ No newline at end of file
diff --git a/test/comparison-tests/html-webpack-plugin/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/html-webpack-plugin/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..d09e34045
--- /dev/null
+++ b/test/comparison-tests/html-webpack-plugin/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,14 @@
+Built at: 2018-3-18 09:18:14
+ Asset Size Chunks Chunk Names
+ bundle.js 2.8 KiB main [emitted] main
+index.html 190 bytes [emitted]
+Entrypoint main = bundle.js
+[./app.ts] 22 bytes {main} [built]
+Child html-webpack-plugin for "index.html":
+ Asset Size Chunks Chunk Names
+ index.html 550 KiB 0
+ Entrypoint undefined = index.html
+ [../../node_modules/html-webpack-plugin/lib/loader.js!./index.html] /node_modules/html-webpack-plugin/lib/loader.js!./index.html 509 bytes {0} [built]
+ [../../node_modules/lodash/lodash.js] /node_modules/lodash/lodash.js 527 KiB {0} [built]
+ [../../node_modules/webpack/buildin/global.js] (webpack)/buildin/global.js 489 bytes {0} [built]
+ [../../node_modules/webpack/buildin/module.js] (webpack)/buildin/module.js 497 bytes {0} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/html-webpack-plugin/expectedOutput-3.4/output.txt b/test/comparison-tests/html-webpack-plugin/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..55defee69
--- /dev/null
+++ b/test/comparison-tests/html-webpack-plugin/expectedOutput-3.4/output.txt
@@ -0,0 +1,14 @@
+Built at: 2018-3-18 09:18:12
+ Asset Size Chunks Chunk Names
+ bundle.js 2.8 KiB main [emitted] main
+index.html 190 bytes [emitted]
+Entrypoint main = bundle.js
+[./app.ts] 22 bytes {main} [built]
+Child html-webpack-plugin for "index.html":
+ Asset Size Chunks Chunk Names
+ index.html 550 KiB 0
+ Entrypoint undefined = index.html
+ [../../node_modules/html-webpack-plugin/lib/loader.js!./index.html] /node_modules/html-webpack-plugin/lib/loader.js!./index.html 509 bytes {0} [built]
+ [../../node_modules/lodash/lodash.js] /node_modules/lodash/lodash.js 527 KiB {0} [built]
+ [../../node_modules/webpack/buildin/global.js] (webpack)/buildin/global.js 489 bytes {0} [built]
+ [../../node_modules/webpack/buildin/module.js] (webpack)/buildin/module.js 497 bytes {0} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/ignoreDiagnostics/expectedOutput-3.4/bundle.js b/test/comparison-tests/ignoreDiagnostics/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..45cd29fc1
--- /dev/null
+++ b/test/comparison-tests/ignoreDiagnostics/expectedOutput-3.4/bundle.js
@@ -0,0 +1,101 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar Foo = /** @class */ (function () {\n function Foo() {\n }\n return Foo;\n}());\nvar Bar = /** @class */ (function () {\n function Bar() {\n }\n return Bar;\n}());\nvar a = 'b'; // this should error with 2322\nmodule.exports = Bar;\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/ignoreDiagnostics/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/ignoreDiagnostics/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..9dae6bc32
--- /dev/null
+++ b/test/comparison-tests/ignoreDiagnostics/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.02 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 256 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/ignoreDiagnostics/expectedOutput-3.4/output.txt b/test/comparison-tests/ignoreDiagnostics/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..2f0543ee0
--- /dev/null
+++ b/test/comparison-tests/ignoreDiagnostics/expectedOutput-3.4/output.txt
@@ -0,0 +1,9 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.02 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 256 bytes {main} [built] [1 error]
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(9,5)[39m[22m
+[1m[31m TS2322: Type '"b"' is not assignable to type 'Number'.[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/importsWatch/expectedOutput-3.4/bundle.js b/test/comparison-tests/importsWatch/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..93a3017f9
--- /dev/null
+++ b/test/comparison-tests/importsWatch/expectedOutput-3.4/bundle.js
@@ -0,0 +1,101 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar foo;\nfoo.bar = 'foobar';\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/importsWatch/expectedOutput-3.4/output.txt b/test/comparison-tests/importsWatch/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..41a3f8c48
--- /dev/null
+++ b/test/comparison-tests/importsWatch/expectedOutput-3.4/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.83 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 70 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/instance/expectedOutput-3.4/bundle.js b/test/comparison-tests/instance/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..847b14122
--- /dev/null
+++ b/test/comparison-tests/instance/expectedOutput-3.4/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./a.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./a.ts":
+/*!**************!*\
+ !*** ./a.ts ***!
+ \**************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("throw new Error(\"Module build failed (from C:/source/ts-loader/index.js):/nError: /u001b[31mA file specified in tsconfig.json could not be found: C://source//ts-loader//.test//instance//i-dont-exist/u001b[39m/n at Object.loader (C://source//ts-loader//dist//index.js:19:18)\");\n\n//# sourceURL=webpack:///./a.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/instance/expectedOutput-3.4/bundle.transpiled.js b/test/comparison-tests/instance/expectedOutput-3.4/bundle.transpiled.js
new file mode 100644
index 000000000..b05300acd
--- /dev/null
+++ b/test/comparison-tests/instance/expectedOutput-3.4/bundle.transpiled.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./a.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./a.ts":
+/*!**************!*\
+ !*** ./a.ts ***!
+ \**************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("throw new Error(\"Module build failed (from C:/source/ts-loader/index.js):/nError: /u001b[31mA file specified in tsconfig.json could not be found: C://source//ts-loader//.test//instance.transpile//i-dont-exist/u001b[39m/n at Object.loader (C://source//ts-loader//dist//index.js:19:18)\");\n\n//# sourceURL=webpack:///./a.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/instance/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/instance/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..75d24f5f4
--- /dev/null
+++ b/test/comparison-tests/instance/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,20 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.03 KiB a [emitted] a
+Entrypoint a = bundle.js
+Entrypoint b =
+[./a.ts] 289 bytes {a} [built] [failed] [1 error]
+[./b.ts] 289 bytes {b} [built] [failed] [1 error]
+
+ERROR in ./a.ts
+Module build failed (from /index.js):
+Error: [31mA file specified in tsconfig.json could not be found: i-dont-exist[39m
+ at Object.loader (dist\index.js:19:18)
+
+ERROR in ./b.ts
+Module build failed (from /index.js):
+Error: [31mA file specified in tsconfig.json could not be found: i-dont-exist[39m
+ at Object.loader (dist\index.js:19:18)
+
+ERROR in chunk b [entry]
+bundle.js
+Conflict: Multiple chunks emit assets to the same filename bundle.js (chunks a and b)
\ No newline at end of file
diff --git a/test/comparison-tests/instance/expectedOutput-3.4/output.txt b/test/comparison-tests/instance/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..583513f04
--- /dev/null
+++ b/test/comparison-tests/instance/expectedOutput-3.4/output.txt
@@ -0,0 +1,20 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.02 KiB a [emitted] a
+Entrypoint a = bundle.js
+Entrypoint b =
+[./a.ts] 279 bytes {a} [built] [failed] [1 error]
+[./b.ts] 279 bytes {b} [built] [failed] [1 error]
+
+ERROR in ./a.ts
+Module build failed (from /index.js):
+Error: [31mA file specified in tsconfig.json could not be found: i-dont-exist[39m
+ at Object.loader (dist\index.js:19:18)
+
+ERROR in ./b.ts
+Module build failed (from /index.js):
+Error: [31mA file specified in tsconfig.json could not be found: i-dont-exist[39m
+ at Object.loader (dist\index.js:19:18)
+
+ERROR in chunk b [entry]
+bundle.js
+Conflict: Multiple chunks emit assets to the same filename bundle.js (chunks a and b)
\ No newline at end of file
diff --git a/test/comparison-tests/issue372/expectedOutput-3.4/bundle.js b/test/comparison-tests/issue372/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..1e40157c3
--- /dev/null
+++ b/test/comparison-tests/issue372/expectedOutput-3.4/bundle.js
@@ -0,0 +1,124 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar foo_1 = __webpack_require__(/*! ./foo */ \"./foo.ts\");\nvar foo;\nfoo.bar = 'foobar' + foo_1.s;\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./foo.ts":
+/*!****************!*\
+ !*** ./foo.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar sString = __webpack_require__(/*! a */ \"./node_modules/a/index.js\");\nexports.s = sString;\n\n\n//# sourceURL=webpack:///./foo.ts?");
+
+/***/ }),
+
+/***/ "./node_modules/a/index.js":
+/*!*********************************!*\
+ !*** ./node_modules/a/index.js ***!
+ \*********************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("module.exports = 'a';\n\n//# sourceURL=webpack:///./node_modules/a/index.js?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/issue372/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/issue372/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..b18a8d192
--- /dev/null
+++ b/test/comparison-tests/issue372/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,7 @@
+Built at: 2018-3-18 09:18:41
+ Asset Size Chunks Chunk Names
+bundle.js 3.61 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 110 bytes {main} [built]
+[./foo.ts] 90 bytes {main} [built]
+[./node_modules/a/index.js] 21 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/issue372/expectedOutput-3.4/output.txt b/test/comparison-tests/issue372/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..bd2a5c308
--- /dev/null
+++ b/test/comparison-tests/issue372/expectedOutput-3.4/output.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.57 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 110 bytes {main} [built]
+[./foo.ts] 90 bytes {main} [built]
+[./node_modules/a/index.js] 21 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/issue372/expectedOutput-3.4/patch0/bundle.js b/test/comparison-tests/issue372/expectedOutput-3.4/patch0/bundle.js
new file mode 100644
index 000000000..a855d8599
--- /dev/null
+++ b/test/comparison-tests/issue372/expectedOutput-3.4/patch0/bundle.js
@@ -0,0 +1,124 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar foo_1 = __webpack_require__(/*! ./foo */ \"./foo.ts\");\nvar foo;\nfoo.bar = 'foobar_patch0' + foo_1.s;\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./foo.ts":
+/*!****************!*\
+ !*** ./foo.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar sString = __webpack_require__(/*! a */ \"./node_modules/a/index.js\");\nexports.s = sString;\n\n\n//# sourceURL=webpack:///./foo.ts?");
+
+/***/ }),
+
+/***/ "./node_modules/a/index.js":
+/*!*********************************!*\
+ !*** ./node_modules/a/index.js ***!
+ \*********************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("module.exports = 'a';\n\n//# sourceURL=webpack:///./node_modules/a/index.js?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/issue372/expectedOutput-3.4/patch0/output.transpiled.txt b/test/comparison-tests/issue372/expectedOutput-3.4/patch0/output.transpiled.txt
new file mode 100644
index 000000000..9da0c74aa
--- /dev/null
+++ b/test/comparison-tests/issue372/expectedOutput-3.4/patch0/output.transpiled.txt
@@ -0,0 +1,7 @@
+Built at: 2018-3-18 09:18:43
+ Asset Size Chunks Chunk Names
+bundle.js 3.61 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 117 bytes {main} [built]
+[./foo.ts] 90 bytes {main}
+[./node_modules/a/index.js] 21 bytes {main}
\ No newline at end of file
diff --git a/test/comparison-tests/issue372/expectedOutput-3.4/patch0/output.txt b/test/comparison-tests/issue372/expectedOutput-3.4/patch0/output.txt
new file mode 100644
index 000000000..ae5a84843
--- /dev/null
+++ b/test/comparison-tests/issue372/expectedOutput-3.4/patch0/output.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.58 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 117 bytes {main} [built]
+[./foo.ts] 90 bytes {main}
+[./node_modules/a/index.js] 21 bytes {main}
\ No newline at end of file
diff --git a/test/comparison-tests/issue441/expectedOutput-3.4/bundle.js b/test/comparison-tests/issue441/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..b04086bcd
--- /dev/null
+++ b/test/comparison-tests/issue441/expectedOutput-3.4/bundle.js
@@ -0,0 +1,101 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\r\nexports.__esModule = true;\r\nvar foo;\r\nfoo.bar = 'foobar';\r\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/issue441/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/issue441/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..8d19164bd
--- /dev/null
+++ b/test/comparison-tests/issue441/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,5 @@
+Built at: 2018-3-18 09:18:55
+ Asset Size Chunks Chunk Names
+bundle.js 2.87 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 74 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/issue441/expectedOutput-3.4/output.txt b/test/comparison-tests/issue441/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..d810f4517
--- /dev/null
+++ b/test/comparison-tests/issue441/expectedOutput-3.4/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.84 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 74 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/issue441/expectedOutput-3.4/patch0/bundle.js b/test/comparison-tests/issue441/expectedOutput-3.4/patch0/bundle.js
new file mode 100644
index 000000000..b04086bcd
--- /dev/null
+++ b/test/comparison-tests/issue441/expectedOutput-3.4/patch0/bundle.js
@@ -0,0 +1,101 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\r\nexports.__esModule = true;\r\nvar foo;\r\nfoo.bar = 'foobar';\r\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/issue441/expectedOutput-3.4/patch0/output.transpiled.txt b/test/comparison-tests/issue441/expectedOutput-3.4/patch0/output.transpiled.txt
new file mode 100644
index 000000000..a356e8960
--- /dev/null
+++ b/test/comparison-tests/issue441/expectedOutput-3.4/patch0/output.transpiled.txt
@@ -0,0 +1,5 @@
+Built at: 2018-3-18 09:18:57
+ Asset Size Chunks Chunk Names
+bundle.js 2.87 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 74 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/issue441/expectedOutput-3.4/patch0/output.txt b/test/comparison-tests/issue441/expectedOutput-3.4/patch0/output.txt
new file mode 100644
index 000000000..d810f4517
--- /dev/null
+++ b/test/comparison-tests/issue441/expectedOutput-3.4/patch0/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.84 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 74 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/issue441/expectedOutput-3.4/patch1/bundle.js b/test/comparison-tests/issue441/expectedOutput-3.4/patch1/bundle.js
new file mode 100644
index 000000000..b04086bcd
--- /dev/null
+++ b/test/comparison-tests/issue441/expectedOutput-3.4/patch1/bundle.js
@@ -0,0 +1,101 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\r\nexports.__esModule = true;\r\nvar foo;\r\nfoo.bar = 'foobar';\r\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/issue441/expectedOutput-3.4/patch1/output.transpiled.txt b/test/comparison-tests/issue441/expectedOutput-3.4/patch1/output.transpiled.txt
new file mode 100644
index 000000000..279a42acf
--- /dev/null
+++ b/test/comparison-tests/issue441/expectedOutput-3.4/patch1/output.transpiled.txt
@@ -0,0 +1,5 @@
+Built at: 2018-3-18 09:19:00
+ Asset Size Chunks Chunk Names
+bundle.js 2.87 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 74 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/issue441/expectedOutput-3.4/patch1/output.txt b/test/comparison-tests/issue441/expectedOutput-3.4/patch1/output.txt
new file mode 100644
index 000000000..d810f4517
--- /dev/null
+++ b/test/comparison-tests/issue441/expectedOutput-3.4/patch1/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.84 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 74 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/issue71/expectedOutput-3.4/bundle.js b/test/comparison-tests/issue71/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..017549af0
--- /dev/null
+++ b/test/comparison-tests/issue71/expectedOutput-3.4/bundle.js
@@ -0,0 +1,124 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar a = __webpack_require__(/*! a */ \"./node_modules/a/index.js\");\nvar b = __webpack_require__(/*! ./b */ \"./b.ts\");\nconsole.log(a);\nconsole.log(b);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./b.ts":
+/*!**************!*\
+ !*** ./b.ts ***!
+ \**************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nmodule.exports = 'b';\n\n\n//# sourceURL=webpack:///./b.ts?");
+
+/***/ }),
+
+/***/ "./node_modules/a/index.js":
+/*!*********************************!*\
+ !*** ./node_modules/a/index.js ***!
+ \*********************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("module.exports = 'a';\n\n//# sourceURL=webpack:///./node_modules/a/index.js?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/issue71/expectedOutput-3.4/output.txt b/test/comparison-tests/issue71/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..e5ab4f9de
--- /dev/null
+++ b/test/comparison-tests/issue71/expectedOutput-3.4/output.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.51 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 119 bytes {main} [built]
+[./b.ts] 36 bytes {main} [built]
+[./node_modules/a/index.js] 21 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/localTsImplementationOfTypings/expectedOutput-3.4/bundle.js b/test/comparison-tests/localTsImplementationOfTypings/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..53d66b071
--- /dev/null
+++ b/test/comparison-tests/localTsImplementationOfTypings/expectedOutput-3.4/bundle.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar myComponent = __webpack_require__(/*! api */ \"./fake.ts\");\nconsole.log(myComponent);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./fake.ts":
+/*!*****************!*\
+ !*** ./fake.ts ***!
+ \*****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nfunction sayHello(name) {\n return \"Hello, \" + name + \"!\";\n}\nexports.sayHello = sayHello;\n\n\n//# sourceURL=webpack:///./fake.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/localTsImplementationOfTypings/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/localTsImplementationOfTypings/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..cd84e12f1
--- /dev/null
+++ b/test/comparison-tests/localTsImplementationOfTypings/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,6 @@
+Built at: 2018-2-11 17:54:32
+ Asset Size Chunks Chunk Names
+bundle.js 3.3 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 101 bytes {main} [built]
+[./fake.ts] 133 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/localTsImplementationOfTypings/expectedOutput-3.4/output.txt b/test/comparison-tests/localTsImplementationOfTypings/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..252582418
--- /dev/null
+++ b/test/comparison-tests/localTsImplementationOfTypings/expectedOutput-3.4/output.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.26 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 101 bytes {main} [built]
+[./fake.ts] 133 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/node/expectedOutput-3.4/bundle.js b/test/comparison-tests/node/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..f53a6e29c
--- /dev/null
+++ b/test/comparison-tests/node/expectedOutput-3.4/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("/// \n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/node/expectedOutput-3.4/output.txt b/test/comparison-tests/node/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..9f23dfb3d
--- /dev/null
+++ b/test/comparison-tests/node/expectedOutput-3.4/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.8 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 67 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/nodeModulesMeaningfulErrorWhenImportingTs/expectedOutput-3.4/bundle.js b/test/comparison-tests/nodeModulesMeaningfulErrorWhenImportingTs/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..5f22097da
--- /dev/null
+++ b/test/comparison-tests/nodeModulesMeaningfulErrorWhenImportingTs/expectedOutput-3.4/bundle.js
@@ -0,0 +1,112 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar a = __webpack_require__(/*! a */ \"./node_modules/a/index.ts\");\nconsole.log(a);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./node_modules/a/index.ts":
+/*!*********************************!*\
+ !*** ./node_modules/a/index.ts ***!
+ \*********************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("throw new Error(\"Module build failed (from C:/source/ts-loader/index.js):/nError: TypeScript emitted no output for C://source//ts-loader//.test//nodeModulesMeaningfulErrorWhenImportingTs//node_modules//a//index.ts. By default, ts-loader will not compile .ts files in node_modules./nYou should not need to recompile .ts files there, but if you really want to, use the allowTsInNodeModules option./nSee: https://github.com/Microsoft/TypeScript/issues/12358/n at makeSourceMapAndFinish (C://source//ts-loader//dist//index.js:78:15)/n at successLoader (C://source//ts-loader//dist//index.js:68:9)/n at Object.loader (C://source//ts-loader//dist//index.js:22:12)\");\n\n//# sourceURL=webpack:///./node_modules/a/index.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/nodeModulesMeaningfulErrorWhenImportingTs/expectedOutput-3.4/bundle.transpiled.js b/test/comparison-tests/nodeModulesMeaningfulErrorWhenImportingTs/expectedOutput-3.4/bundle.transpiled.js
new file mode 100644
index 000000000..829d530c9
--- /dev/null
+++ b/test/comparison-tests/nodeModulesMeaningfulErrorWhenImportingTs/expectedOutput-3.4/bundle.transpiled.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar a = __webpack_require__(/*! a */ \"./node_modules/a/index.ts\");\nconsole.log(a);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./node_modules/a/index.ts":
+/*!*********************************!*\
+ !*** ./node_modules/a/index.ts ***!
+ \*********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar elephant = \"In the room\";\nmodule.exports = elephant;\n\n\n//# sourceURL=webpack:///./node_modules/a/index.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/nodeModulesMeaningfulErrorWhenImportingTs/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/nodeModulesMeaningfulErrorWhenImportingTs/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..6c1e076e0
--- /dev/null
+++ b/test/comparison-tests/nodeModulesMeaningfulErrorWhenImportingTs/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.27 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 79 bytes {main} [built]
+[./node_modules/a/index.ts] 71 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/nodeModulesMeaningfulErrorWhenImportingTs/expectedOutput-3.4/output.txt b/test/comparison-tests/nodeModulesMeaningfulErrorWhenImportingTs/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..393e11295
--- /dev/null
+++ b/test/comparison-tests/nodeModulesMeaningfulErrorWhenImportingTs/expectedOutput-3.4/output.txt
@@ -0,0 +1,15 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.87 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 79 bytes {main} [built]
+[./node_modules/a/index.ts] 669 bytes {main} [built] [failed] [1 error]
+
+ERROR in ./node_modules/a/index.ts
+Module build failed (from /index.js):
+Error: TypeScript emitted no output for node_modules\a\index.ts. By default, ts-loader will not compile .ts files in node_modules.
+You should not need to recompile .ts files there, but if you really want to, use the allowTsInNodeModules option.
+See: https://github.com/Microsoft/TypeScript/issues/12358
+ at makeSourceMapAndFinish (dist\index.js:78:15)
+ at successLoader (dist\index.js:68:9)
+ at Object.loader (dist\index.js:22:12)
+ @ ./app.ts 3:8-20
\ No newline at end of file
diff --git a/test/comparison-tests/nodeResolution/expectedOutput-3.4/bundle.js b/test/comparison-tests/nodeResolution/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..f62c9cd64
--- /dev/null
+++ b/test/comparison-tests/nodeResolution/expectedOutput-3.4/bundle.js
@@ -0,0 +1,112 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar a = __webpack_require__(/*! a */ \"./node_modules/a/index.js\");\nconsole.log(a);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./node_modules/a/index.js":
+/*!*********************************!*\
+ !*** ./node_modules/a/index.js ***!
+ \*********************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("module.exports = 'a';\n\n//# sourceURL=webpack:///./node_modules/a/index.js?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/nodeResolution/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/nodeResolution/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..2996c1ede
--- /dev/null
+++ b/test/comparison-tests/nodeResolution/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,6 @@
+Built at: 2018-3-18 09:19:34
+ Asset Size Chunks Chunk Names
+bundle.js 3.23 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 79 bytes {main} [built]
+[./node_modules/a/index.js] 21 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/nodeResolution/expectedOutput-3.4/output.txt b/test/comparison-tests/nodeResolution/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..72c093c0e
--- /dev/null
+++ b/test/comparison-tests/nodeResolution/expectedOutput-3.4/output.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.19 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 79 bytes {main} [built]
+[./node_modules/a/index.js] 21 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/nolib/expectedOutput-3.4/bundle.js b/test/comparison-tests/nolib/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..2579b12ff
--- /dev/null
+++ b/test/comparison-tests/nolib/expectedOutput-3.4/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("parseInt('10');\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/nolib/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/nolib/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..ee4d4ca16
--- /dev/null
+++ b/test/comparison-tests/nolib/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.75 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 16 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/nolib/expectedOutput-3.4/output.txt b/test/comparison-tests/nolib/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..8c8e530d0
--- /dev/null
+++ b/test/comparison-tests/nolib/expectedOutput-3.4/output.txt
@@ -0,0 +1,37 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.75 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 16 bytes {main} [built] [1 error]
+
+ERROR in tsconfig.json
+[90m[tsl] [39m[1m[31mERROR[39m[22m
+[1m[31m TS2318: Cannot find global type 'Array'.[39m[22m
+
+ERROR in tsconfig.json
+[90m[tsl] [39m[1m[31mERROR[39m[22m
+[1m[31m TS2318: Cannot find global type 'Boolean'.[39m[22m
+
+ERROR in tsconfig.json
+[90m[tsl] [39m[1m[31mERROR[39m[22m
+[1m[31m TS2318: Cannot find global type 'Function'.[39m[22m
+
+ERROR in tsconfig.json
+[90m[tsl] [39m[1m[31mERROR[39m[22m
+[1m[31m TS2318: Cannot find global type 'IArguments'.[39m[22m
+
+ERROR in tsconfig.json
+[90m[tsl] [39m[1m[31mERROR[39m[22m
+[1m[31m TS2318: Cannot find global type 'Number'.[39m[22m
+
+ERROR in tsconfig.json
+[90m[tsl] [39m[1m[31mERROR[39m[22m
+[1m[31m TS2318: Cannot find global type 'Object'.[39m[22m
+
+ERROR in tsconfig.json
+[90m[tsl] [39m[1m[31mERROR[39m[22m
+[1m[31m TS2318: Cannot find global type 'RegExp'.[39m[22m
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(1,1)[39m[22m
+[1m[31m TS2304: Cannot find name 'parseInt'.[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/npmLink/expectedOutput-3.4/bundle.js b/test/comparison-tests/npmLink/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..943633ef8
--- /dev/null
+++ b/test/comparison-tests/npmLink/expectedOutput-3.4/bundle.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "../../test/comparison-tests/testLib/foo.ts":
+/*!****************************************************************!*\
+ !*** C:/source/ts-loader/test/comparison-tests/testLib/foo.ts ***!
+ \****************************************************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nexports[\"default\"] = 'foo';\n\n\n//# sourceURL=webpack:///C:/source/ts-loader/test/comparison-tests/testLib/foo.ts?");
+
+/***/ }),
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar foo_1 = __webpack_require__(/*! lib/foo */ \"../../test/comparison-tests/testLib/foo.ts\");\nconsole.log(foo_1[\"default\"]);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/npmLink/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/npmLink/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..d0d55bde5
--- /dev/null
+++ b/test/comparison-tests/npmLink/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,6 @@
+Built at: 2018-3-18 09:19:44
+ Asset Size Chunks Chunk Names
+bundle.js 3.48 KiB main [emitted] main
+Entrypoint main = bundle.js
+[../../test/comparison-tests/testLib/foo.ts] /test/comparison-tests/testLib/foo.ts 69 bytes {main} [built]
+[./app.ts] 104 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/npmLink/expectedOutput-3.4/output.txt b/test/comparison-tests/npmLink/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..454161ad6
--- /dev/null
+++ b/test/comparison-tests/npmLink/expectedOutput-3.4/output.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.45 KiB main [emitted] main
+Entrypoint main = bundle.js
+[../../test/comparison-tests/testLib/foo.ts] /test/comparison-tests/testLib/foo.ts 69 bytes {main} [built]
+[./app.ts] 104 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/bundle.js b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..1780017e3
--- /dev/null
+++ b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/bundle.js
@@ -0,0 +1,124 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar submodule = __webpack_require__(/*! ./submodule/submodule */ \"./submodule/submodule.ts\");\nvar externalLib = __webpack_require__(/*! externalLib */ \"./lib/externalLib.js\");\nexternalLib.doSomething(submodule);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./lib/externalLib.js":
+/*!****************************!*\
+ !*** ./lib/externalLib.js ***!
+ \****************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("module.exports = {\n doSomething: function() { } \n}\n\n//# sourceURL=webpack:///./lib/externalLib.js?");
+
+/***/ }),
+
+/***/ "./submodule/submodule.ts":
+/*!********************************!*\
+ !*** ./submodule/submodule.ts ***!
+ \********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar externalLib = __webpack_require__(/*! externalLib */ \"./lib/externalLib.js\");\nexternalLib.doSomething(\"\");\nvar message = \"Hello from submodule\";\nmodule.exports = message;\n\n\n//# sourceURL=webpack:///./submodule/submodule.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..c193eb168
--- /dev/null
+++ b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,7 @@
+Built at: 2018-3-18 09:19:54
+ Asset Size Chunks Chunk Names
+bundle.js 3.87 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 169 bytes {main} [built]
+[./lib/externalLib.js] 55 bytes {main} [built]
+[./submodule/submodule.ts] 149 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/output.txt b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..f33d2f14a
--- /dev/null
+++ b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/output.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.83 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 169 bytes {main} [built]
+[./lib/externalLib.js] 55 bytes {main} [built]
+[./submodule/submodule.ts] 149 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch0/bundle.js b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch0/bundle.js
new file mode 100644
index 000000000..69c4dcc59
--- /dev/null
+++ b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch0/bundle.js
@@ -0,0 +1,124 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar submodule = __webpack_require__(/*! ./submodule/submodule */ \"./submodule/submodule.ts\");\nvar externalLib = __webpack_require__(/*! externalLib */ \"./lib/externalLib.js\");\nexternalLib.doSomething2(submodule);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./lib/externalLib.js":
+/*!****************************!*\
+ !*** ./lib/externalLib.js ***!
+ \****************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("module.exports = {\n doSomething: function() { } \n}\n\n//# sourceURL=webpack:///./lib/externalLib.js?");
+
+/***/ }),
+
+/***/ "./submodule/submodule.ts":
+/*!********************************!*\
+ !*** ./submodule/submodule.ts ***!
+ \********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar externalLib = __webpack_require__(/*! externalLib */ \"./lib/externalLib.js\");\nexternalLib.doSomething(\"\");\nvar message = \"Hello from submodule\";\nmodule.exports = message;\n\n\n//# sourceURL=webpack:///./submodule/submodule.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch0/output.transpiled.txt b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch0/output.transpiled.txt
new file mode 100644
index 000000000..1073e8b79
--- /dev/null
+++ b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch0/output.transpiled.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.83 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 170 bytes {main} [built]
+[./lib/externalLib.js] 55 bytes {main}
+[./submodule/submodule.ts] 149 bytes {main}
\ No newline at end of file
diff --git a/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch0/output.txt b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch0/output.txt
new file mode 100644
index 000000000..9fac8da0d
--- /dev/null
+++ b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch0/output.txt
@@ -0,0 +1,11 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.83 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 170 bytes {main} [built] [1 error]
+[./lib/externalLib.js] 55 bytes {main}
+[./submodule/submodule.ts] 149 bytes {main}
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(3,13)[39m[22m
+[1m[31m TS2551: Property 'doSomething2' does not exist on type 'typeof externalLib'. Did you mean 'doSomething'?[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch1/bundle.js b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch1/bundle.js
new file mode 100644
index 000000000..1780017e3
--- /dev/null
+++ b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch1/bundle.js
@@ -0,0 +1,124 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar submodule = __webpack_require__(/*! ./submodule/submodule */ \"./submodule/submodule.ts\");\nvar externalLib = __webpack_require__(/*! externalLib */ \"./lib/externalLib.js\");\nexternalLib.doSomething(submodule);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./lib/externalLib.js":
+/*!****************************!*\
+ !*** ./lib/externalLib.js ***!
+ \****************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("module.exports = {\n doSomething: function() { } \n}\n\n//# sourceURL=webpack:///./lib/externalLib.js?");
+
+/***/ }),
+
+/***/ "./submodule/submodule.ts":
+/*!********************************!*\
+ !*** ./submodule/submodule.ts ***!
+ \********************************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar externalLib = __webpack_require__(/*! externalLib */ \"./lib/externalLib.js\");\nexternalLib.doSomething(\"\");\nvar message = \"Hello from submodule\";\nmodule.exports = message;\n\n\n//# sourceURL=webpack:///./submodule/submodule.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch1/output.transpiled.txt b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch1/output.transpiled.txt
new file mode 100644
index 000000000..82b944346
--- /dev/null
+++ b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch1/output.transpiled.txt
@@ -0,0 +1,7 @@
+Built at: 2018-3-18 09:19:59
+ Asset Size Chunks Chunk Names
+bundle.js 3.87 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 169 bytes {main} [built]
+[./lib/externalLib.js] 55 bytes {main}
+[./submodule/submodule.ts] 149 bytes {main}
\ No newline at end of file
diff --git a/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch1/output.txt b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch1/output.txt
new file mode 100644
index 000000000..1afd1cf5f
--- /dev/null
+++ b/test/comparison-tests/onlyCompileBundledFiles/expectedOutput-3.4/patch1/output.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.83 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 169 bytes {main} [built]
+[./lib/externalLib.js] 55 bytes {main}
+[./submodule/submodule.ts] 149 bytes {main}
\ No newline at end of file
diff --git a/test/comparison-tests/production/expectedOutput-3.4/bundle.transpiled.js b/test/comparison-tests/production/expectedOutput-3.4/bundle.transpiled.js
new file mode 100644
index 000000000..4cfdd438e
--- /dev/null
+++ b/test/comparison-tests/production/expectedOutput-3.4/bundle.transpiled.js
@@ -0,0 +1 @@
+!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t){}]);
\ No newline at end of file
diff --git a/test/comparison-tests/production/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/production/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..35ec561d3
--- /dev/null
+++ b/test/comparison-tests/production/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 930 bytes 0 [emitted] main
+Entrypoint main = bundle.js
+[0] ./app.ts 27 bytes {0} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/production/expectedOutput-3.4/output.txt b/test/comparison-tests/production/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..63923ad42
--- /dev/null
+++ b/test/comparison-tests/production/expectedOutput-3.4/output.txt
@@ -0,0 +1,9 @@
+ Asset Size Chunks Chunk Names
+bundle.js 930 bytes 0 main
+Entrypoint main = bundle.js
+[0] ./app.ts 27 bytes {0} [built] [1 error]
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(4,1)[39m[22m
+[1m[31m TS2322: Type 'string' is not assignable to type 'number'.[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/projectReferences/expectedOutput-3.4/bundle.js b/test/comparison-tests/projectReferences/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..715c05596
--- /dev/null
+++ b/test/comparison-tests/projectReferences/expectedOutput-3.4/bundle.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar lib_1 = __webpack_require__(/*! ./lib */ \"./lib/index.ts\");\nconsole.log(lib_1.lib.one, lib_1.lib.two, lib_1.lib.three);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./lib/index.ts":
+/*!**********************!*\
+ !*** ./lib/index.ts ***!
+ \**********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nexports.lib = {\n one: 1,\n two: 2,\n three: 3\n // I am adding this comment here by hand to ensure\n // Webpack is using the JS output for project references\n};\n\n\n//# sourceURL=webpack:///./lib/index.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/projectReferences/expectedOutput-3.4/output.txt b/test/comparison-tests/projectReferences/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..678bcdcab
--- /dev/null
+++ b/test/comparison-tests/projectReferences/expectedOutput-3.4/output.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.4 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 131 bytes {main} [built]
+[./lib/index.ts] 213 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/projectReferencesNoSourceMap/expectedOutput-3.4/bundle.js b/test/comparison-tests/projectReferencesNoSourceMap/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..7c5f9bb80
--- /dev/null
+++ b/test/comparison-tests/projectReferencesNoSourceMap/expectedOutput-3.4/bundle.js
@@ -0,0 +1,125 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar lib_1 = __webpack_require__(/*! ./lib */ \"./lib/index.ts\");\nconsole.log(lib_1.lib.one, lib_1.lib.two, lib_1.lib.three);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./lib/foo.ts":
+/*!********************!*\
+ !*** ./lib/foo.ts ***!
+ \********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nexports.foo = 'foo';\n\n\n//# sourceURL=webpack:///./lib/foo.ts?");
+
+/***/ }),
+
+/***/ "./lib/index.ts":
+/*!**********************!*\
+ !*** ./lib/index.ts ***!
+ \**********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar foo_1 = __webpack_require__(/*! ./foo */ \"./lib/foo.ts\");\nexports.lib = {\n one: 1,\n two: 2,\n three: 3,\n foo: foo_1.foo\n // I am adding this comment here by hand to ensure\n // Webpack is using the JS output for project references\n};\n\n\n//# sourceURL=webpack:///./lib/index.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/projectReferencesNoSourceMap/expectedOutput-3.4/output.txt b/test/comparison-tests/projectReferencesNoSourceMap/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..3b520c332
--- /dev/null
+++ b/test/comparison-tests/projectReferencesNoSourceMap/expectedOutput-3.4/output.txt
@@ -0,0 +1,11 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.79 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 131 bytes {main} [built]
+[./lib/foo.ts] 62 bytes {main} [built]
+[./lib/index.ts] 263 bytes {main} [built] [1 warning]
+
+WARNING in ./lib/index.ts
+Module Warning (from /index.js):
+Could not find source map file for referenced project output lib\index.js. Ensure the 'sourceMap' compiler option is enabled in lib\tsconfig.json to ensure Webpack can map project references to the appropriate source files.
+ @ ./app.ts 3:12-28
\ No newline at end of file
diff --git a/test/comparison-tests/projectReferencesNotBuilt/expectedOutput-3.4/bundle.js b/test/comparison-tests/projectReferencesNotBuilt/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..427a6d198
--- /dev/null
+++ b/test/comparison-tests/projectReferencesNotBuilt/expectedOutput-3.4/bundle.js
@@ -0,0 +1,112 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar lib_1 = __webpack_require__(/*! ./lib */ \"./lib/index.ts\");\nconsole.log(lib_1.lib.one, lib_1.lib.two, lib_1.lib.three);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./lib/index.ts":
+/*!**********************!*\
+ !*** ./lib/index.ts ***!
+ \**********************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("throw new Error(\"Module build failed (from C:/source/ts-loader/index.js):/nError: Could not find output JavaScript file for input lib//index.ts (looked at lib//index.js)./nThe input file is part of a project reference located at lib//tsconfig.json, so ts-loader is looking for the project’s pre-built output on disk. Try running `tsc --build` to build project references./n at successLoader (C://source//ts-loader//dist//index.js:46:19)/n at Object.loader (C://source//ts-loader//dist//index.js:22:12)\");\n\n//# sourceURL=webpack:///./lib/index.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/projectReferencesNotBuilt/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/projectReferencesNotBuilt/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..3f4eadd56
--- /dev/null
+++ b/test/comparison-tests/projectReferencesNotBuilt/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,17 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.68 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 131 bytes {main} [built] [1 error]
+[./lib/index.ts] 510 bytes {main} [built] [failed] [1 error]
+
+ERROR in tsconfig.json
+[90m[tsl] [39m[1m[31mERROR[39m[22m
+[1m[31m TS6305: Output file '/.test/projectReferencesNotBuilt/lib/index.d.ts' has not been built from source file '/.test/projectReferencesNotBuilt/lib/index.ts'.[39m[22m
+
+ERROR in ./lib/index.ts
+Module build failed (from /index.js):
+Error: Could not find output JavaScript file for input lib\index.ts (looked at lib\index.js).
+The input file is part of a project reference located at lib\tsconfig.json, so ts-loader is looking for the project’s pre-built output on disk. Try running `tsc --build` to build project references.
+ at successLoader (dist\index.js:46:19)
+ at Object.loader (dist\index.js:22:12)
+ @ ./app.ts 3:12-28
\ No newline at end of file
diff --git a/test/comparison-tests/projectReferencesNotBuilt/expectedOutput-3.4/output.txt b/test/comparison-tests/projectReferencesNotBuilt/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..947affc5e
--- /dev/null
+++ b/test/comparison-tests/projectReferencesNotBuilt/expectedOutput-3.4/output.txt
@@ -0,0 +1,17 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.68 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 131 bytes {main} [built]
+[./lib/index.ts] 510 bytes {main} [built] [failed] [1 error]
+
+ERROR in ./lib/index.ts
+Module build failed (from /index.js):
+Error: Could not find output JavaScript file for input lib\index.ts (looked at lib\index.js).
+The input file is part of a project reference located at lib\tsconfig.json, so ts-loader is looking for the project’s pre-built output on disk. Try running `tsc --build` to build project references.
+ at successLoader (dist\index.js:46:19)
+ at Object.loader (dist\index.js:22:12)
+ @ ./app.ts 3:12-28
+
+ERROR in tsconfig.json
+[90m[tsl] [39m[1m[31mERROR[39m[22m
+[1m[31m TS6305: Output file '/.test/projectReferencesNotBuilt/lib/index.d.ts' has not been built from source file '/.test/projectReferencesNotBuilt/lib/index.ts'.[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/projectReferencesOutDir/expectedOutput-3.4/bundle.js b/test/comparison-tests/projectReferencesOutDir/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..0f1d8bc9b
--- /dev/null
+++ b/test/comparison-tests/projectReferencesOutDir/expectedOutput-3.4/bundle.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar lib_1 = __webpack_require__(/*! ./lib */ \"./lib/index.ts\");\nconsole.log(lib_1.lib.one, lib_1.lib.two, lib_1.lib.three);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./lib/index.ts":
+/*!**********************!*\
+ !*** ./lib/index.ts ***!
+ \**********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nexports.lib = {\n one: 1,\n two: 2,\n three: 3\n};\n\n\n//# sourceURL=webpack:///./lib/index.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/projectReferencesOutDir/expectedOutput-3.4/bundle.transpiled.js b/test/comparison-tests/projectReferencesOutDir/expectedOutput-3.4/bundle.transpiled.js
new file mode 100644
index 000000000..0f1d8bc9b
--- /dev/null
+++ b/test/comparison-tests/projectReferencesOutDir/expectedOutput-3.4/bundle.transpiled.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar lib_1 = __webpack_require__(/*! ./lib */ \"./lib/index.ts\");\nconsole.log(lib_1.lib.one, lib_1.lib.two, lib_1.lib.three);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./lib/index.ts":
+/*!**********************!*\
+ !*** ./lib/index.ts ***!
+ \**********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nexports.lib = {\n one: 1,\n two: 2,\n three: 3\n};\n\n\n//# sourceURL=webpack:///./lib/index.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/projectReferencesOutDir/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/projectReferencesOutDir/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..5d7048512
--- /dev/null
+++ b/test/comparison-tests/projectReferencesOutDir/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.28 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 131 bytes {main} [built]
+[./lib/index.ts] 97 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/projectReferencesOutDir/expectedOutput-3.4/output.txt b/test/comparison-tests/projectReferencesOutDir/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..5d7048512
--- /dev/null
+++ b/test/comparison-tests/projectReferencesOutDir/expectedOutput-3.4/output.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.28 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 131 bytes {main} [built]
+[./lib/index.ts] 97 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/projectReferencesRootDir/expectedOutput-3.4/bundle.js b/test/comparison-tests/projectReferencesRootDir/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..5b92811cd
--- /dev/null
+++ b/test/comparison-tests/projectReferencesRootDir/expectedOutput-3.4/bundle.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no exports provided */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _lib_src_index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/src/index */ \"./lib/src/index.ts\");\n\nconsole.log(_lib_src_index__WEBPACK_IMPORTED_MODULE_0__[\"lib\"].one, _lib_src_index__WEBPACK_IMPORTED_MODULE_0__[\"lib\"].two, _lib_src_index__WEBPACK_IMPORTED_MODULE_0__[\"lib\"].three);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./lib/src/index.ts":
+/*!**************************!*\
+ !*** ./lib/src/index.ts ***!
+ \**************************/
+/*! exports provided: lib */
+/***/ (function(module, __webpack_exports__, __webpack_require__) {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"lib\", function() { return lib; });\nconst lib = {\n one: 1,\n two: 2,\n three: 3\n};\n//# sourceMappingURL=index.js.map\n\n//# sourceURL=webpack:///./lib/src/index.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/projectReferencesRootDir/expectedOutput-3.4/output.txt b/test/comparison-tests/projectReferencesRootDir/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..a4653b242
--- /dev/null
+++ b/test/comparison-tests/projectReferencesRootDir/expectedOutput-3.4/output.txt
@@ -0,0 +1,10 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.69 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 81 bytes {main} [built]
+[./lib/src/index.ts] 94 bytes {main} [built] [1 warning]
+
+WARNING in ./lib/src/index.ts
+Module Warning (from /index.js):
+Could not find source map file for referenced project output lib\out\index.js. Ensure the 'sourceMap' compiler option is enabled in lib\tsconfig.json to ensure Webpack can map project references to the appropriate source files.
+ @ ./app.ts 1:0-38 2:12-15 2:21-24 2:30-33
\ No newline at end of file
diff --git a/test/comparison-tests/replacement/expectedOutput-3.4/bundle.js b/test/comparison-tests/replacement/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..bb45415c7
--- /dev/null
+++ b/test/comparison-tests/replacement/expectedOutput-3.4/bundle.js
@@ -0,0 +1,125 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./a.ts":
+/*!**************!*\
+ !*** ./a.ts ***!
+ \**************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar dep = __webpack_require__(/*! ./dep */ \"./sub/dep.ts\");\nmodule.exports = dep;\n\n\n//# sourceURL=webpack:///./a.ts?");
+
+/***/ }),
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar a = __webpack_require__(/*! ./a */ \"./a.ts\");\nconsole.log(a);\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./sub/dep.ts":
+/*!********************!*\
+ !*** ./sub/dep.ts ***!
+ \********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar dep = 'replacement';\nmodule.exports = dep;\n\n\n//# sourceURL=webpack:///./sub/dep.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/replacement/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/replacement/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..8561c3f55
--- /dev/null
+++ b/test/comparison-tests/replacement/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,7 @@
+Built at: 2018-3-18 09:20:11
+ Asset Size Chunks Chunk Names
+bundle.js 3.53 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./a.ts] 64 bytes {main} [built]
+[./app.ts] 81 bytes {main} [built]
+[./sub/dep.ts] 61 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/replacement/expectedOutput-3.4/output.txt b/test/comparison-tests/replacement/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..74e906a99
--- /dev/null
+++ b/test/comparison-tests/replacement/expectedOutput-3.4/output.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.49 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./a.ts] 64 bytes {main} [built]
+[./app.ts] 81 bytes {main} [built]
+[./sub/dep.ts] 61 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/reportFiles/expectedOutput-3.4/bundle.js b/test/comparison-tests/reportFiles/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..541ee72b1
--- /dev/null
+++ b/test/comparison-tests/reportFiles/expectedOutput-3.4/bundle.js
@@ -0,0 +1,113 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\n__webpack_require__(/*! ./skip */ \"./skip.ts\");\nexports.a = '10';\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./skip.ts":
+/*!*****************!*\
+ !*** ./skip.ts ***!
+ \*****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nexports.a = '10';\n\n\n//# sourceURL=webpack:///./skip.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/reportFiles/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/reportFiles/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..dd3e6889a
--- /dev/null
+++ b/test/comparison-tests/reportFiles/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.16 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 78 bytes {main} [built]
+[./skip.ts] 59 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/reportFiles/expectedOutput-3.4/output.txt b/test/comparison-tests/reportFiles/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..607718cd9
--- /dev/null
+++ b/test/comparison-tests/reportFiles/expectedOutput-3.4/output.txt
@@ -0,0 +1,10 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.16 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 78 bytes {main} [built] [1 error]
+[./skip.ts] 59 bytes {main} [built]
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(3,1)[39m[22m
+[1m[31m TS2322: Type '"10"' is not assignable to type 'number'.[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/run-tests.js b/test/comparison-tests/run-tests.js
index 33e4c598b..713b70208 100644
--- a/test/comparison-tests/run-tests.js
+++ b/test/comparison-tests/run-tests.js
@@ -10,7 +10,7 @@ const typescriptVersion = parseFloat(
semver.major(typescript.version) + '.' + semver.minor(typescript.version)
);
// @ts-ignore
-if (typescriptVersion < 3.3 || typescriptVersion > 3.3) return;
+if (typescriptVersion < 3.4 || typescriptVersion > 3.4) return;
// Parse command line arguments
const saveOutputMode = process.argv.indexOf('--save-output') !== -1;
diff --git a/test/comparison-tests/simpleDependency/expectedOutput-3.4/bundle.js b/test/comparison-tests/simpleDependency/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..c0a362098
--- /dev/null
+++ b/test/comparison-tests/simpleDependency/expectedOutput-3.4/bundle.js
@@ -0,0 +1,125 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar dep = __webpack_require__(/*! ./dep */ \"./dep.ts\");\ndep('');\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./deeperDep.ts":
+/*!**********************!*\
+ !*** ./deeperDep.ts ***!
+ \**********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nfunction doSomething(input) {\n}\nmodule.exports = doSomething;\n\n\n//# sourceURL=webpack:///./deeperDep.ts?");
+
+/***/ }),
+
+/***/ "./dep.ts":
+/*!****************!*\
+ !*** ./dep.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar dep = __webpack_require__(/*! ./deeperDep */ \"./deeperDep.ts\");\nmodule.exports = dep;\n\n\n//# sourceURL=webpack:///./dep.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/simpleDependency/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/simpleDependency/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..a01fdfb5e
--- /dev/null
+++ b/test/comparison-tests/simpleDependency/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.53 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 78 bytes {main} [built]
+[./deeperDep.ts] 76 bytes {main} [built]
+[./dep.ts] 70 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/simpleDependency/expectedOutput-3.4/output.txt b/test/comparison-tests/simpleDependency/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..a01fdfb5e
--- /dev/null
+++ b/test/comparison-tests/simpleDependency/expectedOutput-3.4/output.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.53 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 78 bytes {main} [built]
+[./deeperDep.ts] 76 bytes {main} [built]
+[./dep.ts] 70 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch0/bundle.js b/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch0/bundle.js
new file mode 100644
index 000000000..c0a362098
--- /dev/null
+++ b/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch0/bundle.js
@@ -0,0 +1,125 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar dep = __webpack_require__(/*! ./dep */ \"./dep.ts\");\ndep('');\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./deeperDep.ts":
+/*!**********************!*\
+ !*** ./deeperDep.ts ***!
+ \**********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nfunction doSomething(input) {\n}\nmodule.exports = doSomething;\n\n\n//# sourceURL=webpack:///./deeperDep.ts?");
+
+/***/ }),
+
+/***/ "./dep.ts":
+/*!****************!*\
+ !*** ./dep.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar dep = __webpack_require__(/*! ./deeperDep */ \"./deeperDep.ts\");\nmodule.exports = dep;\n\n\n//# sourceURL=webpack:///./dep.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch0/bundle.transpiled.js b/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch0/bundle.transpiled.js
new file mode 100644
index 000000000..c0a362098
--- /dev/null
+++ b/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch0/bundle.transpiled.js
@@ -0,0 +1,125 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar dep = __webpack_require__(/*! ./dep */ \"./dep.ts\");\ndep('');\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./deeperDep.ts":
+/*!**********************!*\
+ !*** ./deeperDep.ts ***!
+ \**********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nfunction doSomething(input) {\n}\nmodule.exports = doSomething;\n\n\n//# sourceURL=webpack:///./deeperDep.ts?");
+
+/***/ }),
+
+/***/ "./dep.ts":
+/*!****************!*\
+ !*** ./dep.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar dep = __webpack_require__(/*! ./deeperDep */ \"./deeperDep.ts\");\nmodule.exports = dep;\n\n\n//# sourceURL=webpack:///./dep.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch0/output.transpiled.txt b/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch0/output.transpiled.txt
new file mode 100644
index 000000000..7b9f56949
--- /dev/null
+++ b/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch0/output.transpiled.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.53 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 78 bytes {main}
+[./deeperDep.ts] 76 bytes {main} [built]
+[./dep.ts] 70 bytes {main}
\ No newline at end of file
diff --git a/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch0/output.txt b/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch0/output.txt
new file mode 100644
index 000000000..74cb33e07
--- /dev/null
+++ b/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch0/output.txt
@@ -0,0 +1,11 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.53 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 78 bytes {main} [1 error]
+[./deeperDep.ts] 76 bytes {main} [built]
+[./dep.ts] 70 bytes {main} [built]
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(3,5)[39m[22m
+[1m[31m TS2345: Argument of type '""' is not assignable to parameter of type 'number'.[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch1/bundle.js b/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch1/bundle.js
new file mode 100644
index 000000000..c0a362098
--- /dev/null
+++ b/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch1/bundle.js
@@ -0,0 +1,125 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar dep = __webpack_require__(/*! ./dep */ \"./dep.ts\");\ndep('');\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./deeperDep.ts":
+/*!**********************!*\
+ !*** ./deeperDep.ts ***!
+ \**********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nfunction doSomething(input) {\n}\nmodule.exports = doSomething;\n\n\n//# sourceURL=webpack:///./deeperDep.ts?");
+
+/***/ }),
+
+/***/ "./dep.ts":
+/*!****************!*\
+ !*** ./dep.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar dep = __webpack_require__(/*! ./deeperDep */ \"./deeperDep.ts\");\nmodule.exports = dep;\n\n\n//# sourceURL=webpack:///./dep.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch1/bundle.transpiled.js b/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch1/bundle.transpiled.js
new file mode 100644
index 000000000..c0a362098
--- /dev/null
+++ b/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch1/bundle.transpiled.js
@@ -0,0 +1,125 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar dep = __webpack_require__(/*! ./dep */ \"./dep.ts\");\ndep('');\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ }),
+
+/***/ "./deeperDep.ts":
+/*!**********************!*\
+ !*** ./deeperDep.ts ***!
+ \**********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nfunction doSomething(input) {\n}\nmodule.exports = doSomething;\n\n\n//# sourceURL=webpack:///./deeperDep.ts?");
+
+/***/ }),
+
+/***/ "./dep.ts":
+/*!****************!*\
+ !*** ./dep.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nvar dep = __webpack_require__(/*! ./deeperDep */ \"./deeperDep.ts\");\nmodule.exports = dep;\n\n\n//# sourceURL=webpack:///./dep.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch1/output.transpiled.txt b/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch1/output.transpiled.txt
new file mode 100644
index 000000000..7b9f56949
--- /dev/null
+++ b/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch1/output.transpiled.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.53 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 78 bytes {main}
+[./deeperDep.ts] 76 bytes {main} [built]
+[./dep.ts] 70 bytes {main}
\ No newline at end of file
diff --git a/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch1/output.txt b/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch1/output.txt
new file mode 100644
index 000000000..46622b920
--- /dev/null
+++ b/test/comparison-tests/simpleDependency/expectedOutput-3.4/patch1/output.txt
@@ -0,0 +1,6 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.53 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 78 bytes {main}
+[./deeperDep.ts] 76 bytes {main} [built]
+[./dep.ts] 70 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/sourceMaps/expectedOutput-3.4/bundle.js b/test/comparison-tests/sourceMaps/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..f3d4c05b6
--- /dev/null
+++ b/test/comparison-tests/sourceMaps/expectedOutput-3.4/bundle.js
@@ -0,0 +1,102 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./a.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./a.ts":
+/*!**************!*\
+ !*** ./a.ts ***!
+ \**************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+console.log('Hello world');
+
+
+/***/ })
+
+/******/ });
+//# sourceMappingURL=bundle.js.map
\ No newline at end of file
diff --git a/test/comparison-tests/sourceMaps/expectedOutput-3.4/bundle.js.map b/test/comparison-tests/sourceMaps/expectedOutput-3.4/bundle.js.map
new file mode 100644
index 000000000..957a153cf
--- /dev/null
+++ b/test/comparison-tests/sourceMaps/expectedOutput-3.4/bundle.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./a.ts"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA,kDAA0C,gCAAgC;AAC1E;AACA;;AAEA;AACA;AACA;AACA,gEAAwD,kBAAkB;AAC1E;AACA,yDAAiD,cAAc;AAC/D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iDAAyC,iCAAiC;AAC1E,wHAAgH,mBAAmB,EAAE;AACrI;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;;AAGA;AACA;;;;;;;;;;;;AClFA,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC","file":"bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./a.ts\");\n","console.log('Hello world')"],"sourceRoot":""}
\ No newline at end of file
diff --git a/test/comparison-tests/sourceMaps/expectedOutput-3.4/output.txt b/test/comparison-tests/sourceMaps/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..79976eca9
--- /dev/null
+++ b/test/comparison-tests/sourceMaps/expectedOutput-3.4/output.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+ bundle.js 3.74 KiB main [emitted] main
+bundle.js.map 3.61 KiB main [emitted] main
+Entrypoint main = bundle.js bundle.js.map
+[./a.ts] 28 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/stub-new-version.js b/test/comparison-tests/stub-new-version.js
index 6e257e20e..bffef705d 100644
--- a/test/comparison-tests/stub-new-version.js
+++ b/test/comparison-tests/stub-new-version.js
@@ -9,8 +9,8 @@ fs.readdirSync(__dirname).forEach(function(test) {
if (test === 'testLib') return;
// update this manually when a new version comes out
- var expectedOutput = path.join(testPath, 'expectedOutput-3.2'),
- newExpectedOutput = path.join(testPath, 'expectedOutput-3.3');
+ var expectedOutput = path.join(testPath, 'expectedOutput-3.3'),
+ newExpectedOutput = path.join(testPath, 'expectedOutput-3.4');
mkdirp.sync(newExpectedOutput);
fs.copySync(expectedOutput, newExpectedOutput);
diff --git a/test/comparison-tests/tsconfigInvalid/expectedOutput-3.4/bundle.js b/test/comparison-tests/tsconfigInvalid/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..304f7229b
--- /dev/null
+++ b/test/comparison-tests/tsconfigInvalid/expectedOutput-3.4/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("throw new Error(\"Module build failed (from C:/source/ts-loader/index.js):/nError: /u001b[31merror while parsing tsconfig.json/u001b[39m/n at Object.loader (C://source//ts-loader//dist//index.js:19:18)\");\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/tsconfigInvalid/expectedOutput-3.4/output.txt b/test/comparison-tests/tsconfigInvalid/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..95c93db90
--- /dev/null
+++ b/test/comparison-tests/tsconfigInvalid/expectedOutput-3.4/output.txt
@@ -0,0 +1,17 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.95 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 206 bytes {main} [built] [failed] [3 errors]
+
+ERROR in tsconfig.json
+[90m[tsl] [39m[1m[31mERROR[39m[22m
+[1m[31m TS5024: Compiler option 'sourceMap' requires a value of type boolean.[39m[22m
+
+ERROR in tsconfig.json
+[90m[tsl] [39m[1m[31mERROR[39m[22m
+[1m[31m TS6046: Argument for '--target' option must be: 'es3', 'es5', 'es6', 'es2015', 'es2016', 'es2017', 'es2018', 'es2019', 'esnext'.[39m[22m
+
+ERROR in ./app.ts
+Module build failed (from /index.js):
+Error: [31merror while parsing tsconfig.json[39m
+ at Object.loader (dist\index.js:19:18)
\ No newline at end of file
diff --git a/test/comparison-tests/tsconfigInvalidFile/expectedOutput-3.4/bundle.js b/test/comparison-tests/tsconfigInvalidFile/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..b3cc9379a
--- /dev/null
+++ b/test/comparison-tests/tsconfigInvalidFile/expectedOutput-3.4/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("throw new Error(\"Module build failed (from C:/source/ts-loader/index.js):/nError: /u001b[31mA file specified in tsconfig.json could not be found: C://source//ts-loader//.test//tsconfigInvalidFile//i-am-a-file-what-does-not-exist.ts/u001b[39m/n at Object.loader (C://source//ts-loader//dist//index.js:19:18)\");\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/tsconfigInvalidFile/expectedOutput-3.4/bundle.transpiled.js b/test/comparison-tests/tsconfigInvalidFile/expectedOutput-3.4/bundle.transpiled.js
new file mode 100644
index 000000000..4906581d6
--- /dev/null
+++ b/test/comparison-tests/tsconfigInvalidFile/expectedOutput-3.4/bundle.transpiled.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/tsconfigInvalidFile/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/tsconfigInvalidFile/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..6a1feb334
--- /dev/null
+++ b/test/comparison-tests/tsconfigInvalidFile/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.73 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 0 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/tsconfigInvalidFile/expectedOutput-3.4/output.txt b/test/comparison-tests/tsconfigInvalidFile/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..993192773
--- /dev/null
+++ b/test/comparison-tests/tsconfigInvalidFile/expectedOutput-3.4/output.txt
@@ -0,0 +1,9 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.06 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 312 bytes {main} [built] [failed] [1 error]
+
+ERROR in ./app.ts
+Module build failed (from /index.js):
+Error: [31mA file specified in tsconfig.json could not be found: i-am-a-file-what-does-not-exist.ts[39m
+ at Object.loader (dist\index.js:19:18)
\ No newline at end of file
diff --git a/test/comparison-tests/tsconfigNotReadable/expectedOutput-3.4/bundle.js b/test/comparison-tests/tsconfigNotReadable/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..68384d66f
--- /dev/null
+++ b/test/comparison-tests/tsconfigNotReadable/expectedOutput-3.4/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("throw new Error(\"Module build failed (from C:/source/ts-loader/index.js):/nError: /u001b[31merror while reading tsconfig.json:/u001b[39m/r/n/u001b[31m/u001b[90m[tsl] /u001b[31m/u001b[1m/u001b[31mERROR/u001b[31m/u001b[22m/u001b[1m/u001b[31m in /u001b[31m/u001b[22m/u001b[1m/u001b[36mC://source//ts-loader//.test//tsconfigNotReadable//tsconfig.json(5,2)/u001b[31m/u001b[22m/u001b[39m/r/n/u001b[31m/u001b[1m/u001b[31m TS1109: Expression expected./u001b[31m/u001b[22m/u001b[39m/n at Object.loader (C://source//ts-loader//dist//index.js:19:18)\");\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/tsconfigNotReadable/expectedOutput-3.4/bundle.transpiled.js b/test/comparison-tests/tsconfigNotReadable/expectedOutput-3.4/bundle.transpiled.js
new file mode 100644
index 000000000..d94a76001
--- /dev/null
+++ b/test/comparison-tests/tsconfigNotReadable/expectedOutput-3.4/bundle.transpiled.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("throw new Error(\"Module build failed (from C:/source/ts-loader/index.js):/nError: /u001b[31merror while reading tsconfig.json:/u001b[39m/r/n/u001b[31m/u001b[90m[tsl] /u001b[31m/u001b[1m/u001b[31mERROR/u001b[31m/u001b[22m/u001b[1m/u001b[31m in /u001b[31m/u001b[22m/u001b[1m/u001b[36mC://source//ts-loader//.test//tsconfigNotReadable.transpile//tsconfig.json(5,2)/u001b[31m/u001b[22m/u001b[39m/r/n/u001b[31m/u001b[1m/u001b[31m TS1109: Expression expected./u001b[31m/u001b[22m/u001b[39m/n at Object.loader (C://source//ts-loader//dist//index.js:19:18)\");\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/tsconfigNotReadable/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/tsconfigNotReadable/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..b172f4309
--- /dev/null
+++ b/test/comparison-tests/tsconfigNotReadable/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,11 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.33 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 559 bytes {main} [built] [failed] [1 error]
+
+ERROR in ./app.ts
+Module build failed (from /index.js):
+Error: [31merror while reading tsconfig.json:[39m
+[31m[90m[tsl] [31m[1m[31mERROR[31m[22m[1m[31m in [31m[22m[1m[36mtsconfig.json(5,2)[31m[22m[39m
+[31m[1m[31m TS1109: Expression expected.[31m[22m[39m
+ at Object.loader (dist\index.js:19:18)
\ No newline at end of file
diff --git a/test/comparison-tests/tsconfigNotReadable/expectedOutput-3.4/output.txt b/test/comparison-tests/tsconfigNotReadable/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..f4610e7b3
--- /dev/null
+++ b/test/comparison-tests/tsconfigNotReadable/expectedOutput-3.4/output.txt
@@ -0,0 +1,11 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.32 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 549 bytes {main} [built] [failed] [1 error]
+
+ERROR in ./app.ts
+Module build failed (from /index.js):
+Error: [31merror while reading tsconfig.json:[39m
+[31m[90m[tsl] [31m[1m[31mERROR[31m[22m[1m[31m in [31m[22m[1m[36mtsconfig.json(5,2)[31m[22m[39m
+[31m[1m[31m TS1109: Expression expected.[31m[22m[39m
+ at Object.loader (dist\index.js:19:18)
\ No newline at end of file
diff --git a/test/comparison-tests/tsconfigSearch/expectedOutput-3.4/bundle.js b/test/comparison-tests/tsconfigSearch/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..717083d76
--- /dev/null
+++ b/test/comparison-tests/tsconfigSearch/expectedOutput-3.4/bundle.js
@@ -0,0 +1,112 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./src/app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./lib/externalLib.js":
+/*!****************************!*\
+ !*** ./lib/externalLib.js ***!
+ \****************************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("module.exports = {\n doSomething: function() { } \n}\n\n//# sourceURL=webpack:///./lib/externalLib.js?");
+
+/***/ }),
+
+/***/ "./src/app.ts":
+/*!********************!*\
+ !*** ./src/app.ts ***!
+ \********************/
+/*! no static exports found */
+/***/ (function(module, exports, __webpack_require__) {
+
+"use strict";
+eval("\nexports.__esModule = true;\nvar externalLib = __webpack_require__(/*! externalLib */ \"./lib/externalLib.js\");\nexternalLib.doSomething('');\n\n\n//# sourceURL=webpack:///./src/app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/tsconfigSearch/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/tsconfigSearch/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..8110ad6c0
--- /dev/null
+++ b/test/comparison-tests/tsconfigSearch/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,6 @@
+Built at: 2018-3-18 09:20:55
+ Asset Size Chunks Chunk Names
+bundle.js 3.29 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./lib/externalLib.js] 55 bytes {main} [built]
+[./src/app.ts] 112 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/tsconfigSearch/expectedOutput-3.4/output.txt b/test/comparison-tests/tsconfigSearch/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..976f0477d
--- /dev/null
+++ b/test/comparison-tests/tsconfigSearch/expectedOutput-3.4/output.txt
@@ -0,0 +1,5 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.25 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./lib/externalLib.js] 55 bytes {main} [built]
+[./src/app.ts] 112 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/bundle.js b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..94f8c68e2
--- /dev/null
+++ b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("var Foo = /** @class */ (function () {\n function Foo() {\n }\n Foo.prototype.getSomething = function () {\n return null;\n };\n return Foo;\n}());\nvar foo = new Foo();\nvar x = foo.getSomething();\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/output.transpiled.txt b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/output.transpiled.txt
new file mode 100644
index 000000000..1b16d8347
--- /dev/null
+++ b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/output.transpiled.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.95 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 212 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/output.txt b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..1b16d8347
--- /dev/null
+++ b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.95 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 212 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch0/bundle.js b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch0/bundle.js
new file mode 100644
index 000000000..94f8c68e2
--- /dev/null
+++ b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch0/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("var Foo = /** @class */ (function () {\n function Foo() {\n }\n Foo.prototype.getSomething = function () {\n return null;\n };\n return Foo;\n}());\nvar foo = new Foo();\nvar x = foo.getSomething();\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch0/bundle.transpiled.js b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch0/bundle.transpiled.js
new file mode 100644
index 000000000..94f8c68e2
--- /dev/null
+++ b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch0/bundle.transpiled.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("var Foo = /** @class */ (function () {\n function Foo() {\n }\n Foo.prototype.getSomething = function () {\n return null;\n };\n return Foo;\n}());\nvar foo = new Foo();\nvar x = foo.getSomething();\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch0/output.transpiled.txt b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch0/output.transpiled.txt
new file mode 100644
index 000000000..1b16d8347
--- /dev/null
+++ b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch0/output.transpiled.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.95 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 212 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch0/output.txt b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch0/output.txt
new file mode 100644
index 000000000..3de8aa6e6
--- /dev/null
+++ b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch0/output.txt
@@ -0,0 +1,9 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.95 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 212 bytes {main} [built] [1 error]
+
+ERROR in app.ts
+./app.ts
+[90m[tsl] [39m[1m[31mERROR[39m[22m[1m[31m in [39m[22m[1m[36mapp.ts(11,5)[39m[22m
+[1m[31m TS2741: Property 'b' is missing in type 'AType' but required in type 'BType'.[39m[22m
\ No newline at end of file
diff --git a/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch1/bundle.js b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch1/bundle.js
new file mode 100644
index 000000000..94f8c68e2
--- /dev/null
+++ b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch1/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("var Foo = /** @class */ (function () {\n function Foo() {\n }\n Foo.prototype.getSomething = function () {\n return null;\n };\n return Foo;\n}());\nvar foo = new Foo();\nvar x = foo.getSomething();\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch1/bundle.transpiled.js b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch1/bundle.transpiled.js
new file mode 100644
index 000000000..94f8c68e2
--- /dev/null
+++ b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch1/bundle.transpiled.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("var Foo = /** @class */ (function () {\n function Foo() {\n }\n Foo.prototype.getSomething = function () {\n return null;\n };\n return Foo;\n}());\nvar foo = new Foo();\nvar x = foo.getSomething();\n\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch1/output.transpiled.txt b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch1/output.transpiled.txt
new file mode 100644
index 000000000..1b16d8347
--- /dev/null
+++ b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch1/output.transpiled.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.95 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 212 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch1/output.txt b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch1/output.txt
new file mode 100644
index 000000000..1b16d8347
--- /dev/null
+++ b/test/comparison-tests/typeSystemWatch/expectedOutput-3.4/patch1/output.txt
@@ -0,0 +1,4 @@
+ Asset Size Chunks Chunk Names
+bundle.js 3.95 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 212 bytes {main} [built]
\ No newline at end of file
diff --git a/test/comparison-tests/validateLoaderOptionNames/expectedOutput-3.4/bundle.js b/test/comparison-tests/validateLoaderOptionNames/expectedOutput-3.4/bundle.js
new file mode 100644
index 000000000..f469245b1
--- /dev/null
+++ b/test/comparison-tests/validateLoaderOptionNames/expectedOutput-3.4/bundle.js
@@ -0,0 +1,100 @@
+/******/ (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] = {
+/******/ i: moduleId,
+/******/ l: false,
+/******/ exports: {}
+/******/ };
+/******/
+/******/ // Execute the module function
+/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
+/******/
+/******/ // Flag the module as loaded
+/******/ module.l = 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;
+/******/
+/******/ // define getter function for harmony exports
+/******/ __webpack_require__.d = function(exports, name, getter) {
+/******/ if(!__webpack_require__.o(exports, name)) {
+/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
+/******/ }
+/******/ };
+/******/
+/******/ // define __esModule on exports
+/******/ __webpack_require__.r = function(exports) {
+/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
+/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
+/******/ }
+/******/ Object.defineProperty(exports, '__esModule', { value: true });
+/******/ };
+/******/
+/******/ // create a fake namespace object
+/******/ // mode & 1: value is a module id, require it
+/******/ // mode & 2: merge all properties of value into the ns
+/******/ // mode & 4: return value when already ns object
+/******/ // mode & 8|1: behave like require
+/******/ __webpack_require__.t = function(value, mode) {
+/******/ if(mode & 1) value = __webpack_require__(value);
+/******/ if(mode & 8) return value;
+/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
+/******/ var ns = Object.create(null);
+/******/ __webpack_require__.r(ns);
+/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
+/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
+/******/ return ns;
+/******/ };
+/******/
+/******/ // getDefaultExport function for compatibility with non-harmony modules
+/******/ __webpack_require__.n = function(module) {
+/******/ var getter = module && module.__esModule ?
+/******/ function getDefault() { return module['default']; } :
+/******/ function getModuleExports() { return module; };
+/******/ __webpack_require__.d(getter, 'a', getter);
+/******/ return getter;
+/******/ };
+/******/
+/******/ // Object.prototype.hasOwnProperty.call
+/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
+/******/
+/******/ // __webpack_public_path__
+/******/ __webpack_require__.p = "";
+/******/
+/******/
+/******/ // Load entry module and return exports
+/******/ return __webpack_require__(__webpack_require__.s = "./app.ts");
+/******/ })
+/************************************************************************/
+/******/ ({
+
+/***/ "./app.ts":
+/*!****************!*\
+ !*** ./app.ts ***!
+ \****************/
+/*! no static exports found */
+/***/ (function(module, exports) {
+
+eval("throw new Error(\"Module build failed (from C:/source/ts-loader/index.js):/nError: ts-loader was supplied with an unexpected loader option: notRealOption/n/nPlease take a look at the options you are supplying; the following are valid options:/nsilent / logLevel / logInfoToStdOut / instance / compiler / context / configFile / transpileOnly / ignoreDiagnostics / errorFormatter / colors / compilerOptions / appendTsSuffixTo / appendTsxSuffixTo / onlyCompileBundledFiles / happyPackMode / getCustomTransformers / reportFiles / experimentalWatchApi / allowTsInNodeModules / experimentalFileCaching / projectReferences / resolveModuleName/n/n at validateLoaderOptions (C://source//ts-loader//dist//index.js:152:19)/n at getLoaderOptions (C://source//ts-loader//dist//index.js:110:5)/n at Object.loader (C://source//ts-loader//dist//index.js:16:21)\");\n\n//# sourceURL=webpack:///./app.ts?");
+
+/***/ })
+
+/******/ });
\ No newline at end of file
diff --git a/test/comparison-tests/validateLoaderOptionNames/expectedOutput-3.4/output.txt b/test/comparison-tests/validateLoaderOptionNames/expectedOutput-3.4/output.txt
new file mode 100644
index 000000000..6f71f590f
--- /dev/null
+++ b/test/comparison-tests/validateLoaderOptionNames/expectedOutput-3.4/output.txt
@@ -0,0 +1,15 @@
+ Asset Size Chunks Chunk Names
+bundle.js 4.6 KiB main [emitted] main
+Entrypoint main = bundle.js
+[./app.ts] 855 bytes {main} [built] [failed] [1 error]
+
+ERROR in ./app.ts
+Module build failed (from /index.js):
+Error: ts-loader was supplied with an unexpected loader option: notRealOption
+
+Please take a look at the options you are supplying; the following are valid options:
+silent / logLevel / logInfoToStdOut / instance / compiler / context / configFile / transpileOnly / ignoreDiagnostics / errorFormatter / colors / compilerOptions / appendTsSuffixTo / appendTsxSuffixTo / onlyCompileBundledFiles / happyPackMode / getCustomTransformers / reportFiles / experimentalWatchApi / allowTsInNodeModules / experimentalFileCaching / projectReferences / resolveModuleName
+
+ at validateLoaderOptions (dist\index.js:152:19)
+ at getLoaderOptions (dist\index.js:110:5)
+ at Object.loader (dist\index.js:16:21)
\ No newline at end of file
diff --git a/yarn.lock b/yarn.lock
index 49e9536ec..4bb721ffb 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -3831,9 +3831,9 @@ posix-character-classes@^0.1.0:
integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=
prettier@^1.11.1:
- version "1.15.3"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.15.3.tgz#1feaac5bdd181237b54dbe65d874e02a1472786a"
- integrity sha512-gAU9AGAPMaKb3NNSUUuhhFAS7SCO4ALTN4nRIn6PJ075Qd28Yn2Ig2ahEJWdJwJmlEBTUfC7mMUSFy8MwsOCfg==
+ version "1.16.4"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.16.4.tgz#73e37e73e018ad2db9c76742e2647e21790c9717"
+ integrity sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==
pretty-error@^2.0.2:
version "2.1.1"
@@ -4748,9 +4748,9 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
typescript@^3.1.1:
- version "3.3.3"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.3.3.tgz#f1657fc7daa27e1a8930758ace9ae8da31403221"
- integrity sha512-Y21Xqe54TBVp+VDSNbuDYdGw0BpoR/Q6wo/+35M8PAU0vipahnyduJWirxxdxjsAkS7hue53x2zp8gz7F05u0A==
+ version "3.4.1"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.1.tgz#b6691be11a881ffa9a05765a205cb7383f3b63c6"
+ integrity sha512-3NSMb2VzDQm8oBTLH6Nj55VVtUEpe/rgkIzMir0qVoLyjDZlnMBva0U6vDiV3IH+sl/Yu6oP5QwsAQtHPmDd2Q==
uglify-es@^3.3.4:
version "3.3.9"