Ich konvertiere gerade eine Reihe von JavaScript-Modulen in ECMAScript 6-Klassen. Wir verwenden require.js für den AMD-Loader und schreiben die define ([], ...) Logik manuell.Objekt unterstützt diese Aktion nicht neu x() nach babel transform
Wir verwenden Babel, um die ES 6-Klassen zurück zu ES 5 definierten Modulen zu übertragen. Meine bablerc Datei sieht wie folgt aus:
{
"presets": ["es2015"],
"plugins": ["transform-es2015-modules-amd"]
}
Eine einfache Klasse sieht wie folgt aus
import x from "dev/x"
import ko from "knockout"
import z from "dev/z"
export class y extends x {
...
}
Die Ausgabe sieht MOSTLY rechts:
define(["exports","dev/x", "knockout", "dev/z"], function(x, knockout, z){
Object.defineProperty(exports,"__esModule",{value: true});
// Bunch of generated crap
var y = exports.y = function(_x)...(_x2.default);
}
Also, wenn ich versuche zu tun:
var foo = new y();
Ich bekomme ein "Objekt nicht s Unterstützen Sie diese Aktion "JavaScript exception.
Ich habe versucht, den generierten Code zu ändern (was ich will nicht zu tun) zu lesen:
var y = exports = function(_x)...(_x2.default);
Aber das nichts zu tun hat. Allerdings, wenn ich diese Zeile auf diese ändern:
return function(_x)...(_x2.default);
oder fügen Sie diese Zeile:
var y = exports = function(_x)...(_x2.default);
return y;
Alles funktioniert, wie es sollte. Ich möchte die generierte Datei nicht jedes Mal ändern müssen, wenn wir eine Änderung vornehmen, ich möchte nur, dass Babel es tut und recht hat! Was fehlt mir hier?
UPDATE: Ich benutze system.js Teil der Druandal-Bibliotheken (durandaljs.com), die die Aufrufe zu erfordern, indem eine Funktion namens Aquire eine Modul-ID übergeben und es lädt. Also mache ich einen Anruf wie folgt aus:
system.acquire(moduleNameAndPath).then(function acquiredModuleFunc(acquiredModule) {
if (acquiredModule !== null || acquiredModule !== undefined){
var item = new acquiredModule(); // Object doesn't support here...
}
}
wir dies mit einem Pseudo-polymorphen Verhalten einzuführen, wenn Ansicht Modelle erstellt, die eine Ansicht gebunden ist.
Wenn Sie es als 'var y ändern = Exporte = ...' dann exportieren Sie nichts überhaupt, nur Neuzuweisung 'exports'. Wo genau machst du 'var foo = new y();' es ist nicht in deinem Beispiel-Modul, so ist es nicht klar. – loganfsmyth
Entschuldigung ja, ich bin das Objekt in einem anderen Modul alle zusammen neu. Ich verwende Require, um sicherzustellen, dass das Modul geladen ist (sonst würde es überhaupt nicht funktionieren). Ich merke, dass ich mit dieser ersten Änderung nichts exportiere, aber das ist nur etwas, das ich bei einer anderen Suche gesehen habe, also dachte ich nur, ich würde es dort hineinwerfen, so wie ich es versucht habe. Hier geht es darum, was die Ausgabe von Babel ist ... – iMortalitySX
Was Sie in dem anderen Modul machen, ist wahrscheinlich der wichtige Teil. Babels Leistung ist, was ich erwarten würde. Sie geben einen benannten Export namens "y" aus, in dem sich ein Konstruktor befindet. In dem Modul, in dem Sie es laden, müssen Sie entweder Babel benutzen oder 'define ([" y "], function (yModule) {new yModule.y();})' – loganfsmyth