Der Hauptunterschied zwischen requireund besteht darin import, dass requireautomatisch node_modulesnach Modulen importgesucht wird, bei ES6 jedoch nicht.
Die meisten Leute benutzen babel zum kompilieren importund export, was importdas gleiche macht wie require.
Die zukünftige Version von Node.js unterstützt importsich möglicherweise selbst (tatsächlich tut dies die experimentelle Version bereits ), und nach den Notizen von Node.js importwird dies nicht unterstützt node_modules, sie basiert auf ES6 und muss den Pfad des Moduls angeben.
Ich würde also vorschlagen, dass Sie nicht importmit babel verwenden, aber diese Funktion ist noch nicht bestätigt. Sie wird möglicherweise node_modulesin Zukunft unterstützt. Wer würde das wissen?
Im Folgenden finden Sie ein Beispiel dafür, wie babel die ES6- importSyntax in die CommonJS- requireSyntax konvertieren kann .
Angenommen, die Datei app_es6.jsenthält diesen Import:
import format from 'date-fns/format';
Dies ist eine Anweisung zum Importieren der Formatierungsfunktion aus dem Knotenpaket date-fns .
Die zugehörige package.jsonDatei könnte Folgendes enthalten:
"scripts": {
"start": "node app.js",
"build-server-file": "babel app_es6.js --out-file app.js",
"webpack": "webpack"
}
Die zugehörige .babelrcDatei könnte ungefähr so aussehen:
{
"presets": [
[
"env",
{
"targets":
{
"node": "current"
}
}
]
]
}
Dieses build-server-filein der package.jsonDatei definierte Skript ist eine Anweisung für babel, die app_es6.jsDatei zu analysieren und die Datei auszugeben app.js.
build-server-fileWenn Sie nach dem Ausführen des Skripts app.jsden date-fnsImport öffnen und suchen , sehen Sie, dass er in diesen konvertiert wurde:
var _format = require("date-fns/format");
var _format2 = _interopRequireDefault(_format);
Der größte Teil dieser Datei ist für die meisten Menschen ein Gobbledy-Buch, aber Computer verstehen es.
Als Referenz dafür, wie ein Modul erstellt und in Ihr Projekt importiert werden kann, können Sie beim Installieren date-fnsund anschließenden Öffnen node_modules/date-fns/get_year/index.jsFolgendes sehen:
var parse = require('../parse/index.js')
function getYear (dirtyDate) {
var date = parse(dirtyDate)
var year = date.getFullYear()
return year
}
module.exports = getYear
Mit dem oben beschriebenen Babel-Prozess app_es6.jskönnte Ihre Datei dann Folgendes enthalten:
import getYear from 'date-fns/get_year';
// Which year is 2 July 2014?
var result = getYear(new Date(2014, 6, 2))
//=> 2014
Und babel würde die Importe umwandeln in:
var _get_year = require("date-fns/get_year");
var _get_year2 = _interopRequireDefault(_get_year);
Und behandeln Sie alle Verweise auf die Funktion entsprechend.
expressist jedoch vom Typany. Sie könnten die Definitionen von hier einfügen npmjs.com/package/@types/express