2017-02-27 1 views
0

J'essaie de tourner Magento 2 dans le futur et j'y ajouterai un support de Typoscript. Tout compile correctement, mais je ne peux pas le charger :(Chargement des modules AMD Typescript compilés dans Magento2

nécessitent-config.js

var config = { 
    deps: [ 
     "web/js/app" 
    ], 
    bundles: { 
     "web/js/app": [ "main", "moduleone", "moduletwo" ] 
    } 
}; 

web/js/app.js

define("moduleone", ["require", "exports"], function (require, exports) { 
    "use strict"; 
    Object.defineProperty(exports, "__esModule", { value: true }); 
    var ModuleOne = (function() { 
     function ModuleOne() { 
     } 
     ModuleOne.prototype.sayHello = function() { 
      console.log("Hello from ModuleTwo!"); 
     }; 
     ModuleOne.prototype.sayHelloTo = function (who) { 
      console.log("Hello " + who.trim() + ". This is ModuleTwo"); 
     }; 
     return ModuleOne; 
    }()); 
    exports.ModuleOne = ModuleOne; 
}); 
define("moduletwo", ["require", "exports"], function (require, exports) { 
    "use strict"; 
    Object.defineProperty(exports, "__esModule", { value: true }); 
    var ModuleTwo = (function() { 
     function ModuleTwo() { 
     } 
     ModuleTwo.prototype.sayHello = function() { 
      console.log("Hello from ModuleTwo!"); 
     }; 
     ModuleTwo.prototype.sayHelloTo = function (who) { 
      console.log("Hello " + who.trim() + ". This is ModuleTwo"); 
     }; 
     return ModuleTwo; 
    }()); 
    exports.ModuleTwo = ModuleTwo; 
}); 
define("main", ["require", "exports", "moduleone", "moduletwo"], function (require, exports, Module1, Module2) { 
    "use strict"; 
    Object.defineProperty(exports, "__esModule", { value: true }); 
    var Main = (function() { 
     function Main() { 
      console.log('Test'); 
     } 
     Main.prototype.start = function() { 
      var m1 = new Module1.ModuleOne(); 
      var m2 = new Module2.ModuleTwo(); 
      m1.sayHelloTo("David Wesst"); 
      m2.sayHelloTo("David Wesst"); 
     }; 
     return Main; 
    }()); 
    exports.Main = Main; 
}); 

module de chargement:

<script type="text/javascript"> 
require(['main'], function(Main) { 
    console.log(Main); 
    var app = new Main(); 
    app.start(); 
});</script> 

Appeler Retour principaux:

Uncaught TypeError: Main is not a constructor

Aide de Plz!

Répondre

1

Puisque vous écrivez JavaScript brut AMD, il suffit d'utiliser return Main et pasexports.Main = Main, qui devrait faire l'affaire.

Peut-être que je suis un malentendu et que c'est une sortie compilée, ça ressemble à ça.

Dans ce cas, utiliser, si elle est compilée à partir des sources tapuscrit, vous pouvez (très, très désagréablement) utiliser

export = class Main {}; 

sur ce que vous avez maintenant ce qui serait

export class Main {} 

Personnellement, Je mordre la balle et écrire

export default class Main {}; 

et bootstrap avecDe cette façon, nous pouvons tous aller de l'avant ensemble et tuer le mauvais service hérité de TypeScript + NodeJS + CJS + AMD + Interop dans les navigateurs.